簡體   English   中英

MS DAAB 4.1數據庫對象是線程安全的嗎?

[英]Is the MS DAAB 4.1 Database object threadsafe?

我遇到了一些具有單例的代碼,這些代碼創建/重用了MSDAAB數據庫對象的靜態實例。 創建數據庫對象后線程安全嗎? 我在MSDAAB文檔中找不到任何一種方法。

盡管有這個答案 ,但我認為正式答案是否定的。

我之所以這么說是因為Database將存儲過程參數緩存在一個名為parameterCache的實例變量中。

將項目添加到緩存中,並且也可以使用ClearParameterCache()方法清除緩存,而無需先獲得對parameterCache的鎖定。

如果ClearParameterCache() ,則有可能遇到以下情況:一個線程認為高速緩存中有一個項目,然后另一個線程清除高速緩存,當第一個線程去檢索該項目時,它已被刪除並拋出異常。 。

好消息是,如果從不調用ClearParameterCache()那么我會想到的最糟糕的情況是,最初可以多次導出參數,然后多次(通過不同的線程)將參數添加到緩存中。 我沒有測試過,但看起來它仍然可以工作(盡管效率很低)。

因此,實際上,只要您不調用ClearParameterCache()我認為您就可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM