0
我遇到過一些代碼,它有一個創建/重用MSDAAB數據庫對象的靜態實例的單例。數據庫對象在創建後是線程安全的嗎?我無法在MSDAAB文檔中找到任何其他方法。MS DAAB 4.1數據庫對象線程安全嗎?
我遇到過一些代碼,它有一個創建/重用MSDAAB數據庫對象的靜態實例的單例。數據庫對象在創建後是線程安全的嗎?我無法在MSDAAB文檔中找到任何其他方法。MS DAAB 4.1數據庫對象線程安全嗎?
儘管this answer,我認爲正式答案是否定的。
我之所以這樣說的原因是Database
將存儲過程參數緩存在名爲parameterCache
的實例變量中。
將項目添加到緩存中,並且也可以使用ClearParameterCache()
方法清除緩存,而不先獲取對parameterCache
的鎖定。
如果調用了ClearParameterCache()
,那麼可能會遇到一個線程認爲緩存中存在項目的情況,然後另一個線程清除緩存,並且第一個線程去檢索已被移除的項目以及異常被拋出。
好消息是,如果ClearParameterCache()
從未被調用,那麼我期望的最壞的情況是,最初參數可以被多次導出並且被多次添加到緩存中(通過不同的線程)。我沒有測試過,但它看起來應該仍然有效(儘管效率很低)。
所以,實際上,只要你不打電話ClearParameterCache()
我認爲你應該沒問題。