2010-02-15 93 views
5

什麼是最好的模式使數據集線程安全寫入?使數據集線程安全的C#

我可以找到的最好的谷歌搜索是'實施與鎖'包裝層'但乍一看這似乎相當混亂。

有人可以推薦/指向我一個很好的解決方案嗎?這似乎是一個已經在某個地方解決的問題。

編輯:我也需要綁定數據集到一個UI網格,這有點複雜的事情。

+0

對不起,數據集很混亂! –

回答

3

「實現帶鎖的包裝層」是要走的路。

包裝層可能會使用特定於您的應用程序使用數據集的方式的鎖定。

試圖設計一類複雜的一個通用的解決方案作爲一個DataSet可能是註定要失敗的。

例如,枚舉屬性通常不會是線程安全的 - 因此只要任何調用方正在枚舉任何許多集合屬性(DataSet.Tables,DataTable.Rows,..),您都需要保持鎖定狀態。 )。

1

這真的很大程度上取決於所討論的數據。

如果你處理的整數或引用類型值,則可以Interlocked class優於服用鎖。否則,成功同步通常意味着在類中創建鎖定內部。

但是,另一種替代方法是使主數據集工作在不可變類型上。然後,您可以在單個線程中處理副本,並僅在主數據集內的替換值處提供同步。這可以避免鎖定每個線程的單個副本。

1

用鎖實現一個包裝層。認真。你不能繼承重要的方法,只要它們可用,你的線程安全就可以被破壞。

那麼,你也可以實現一組線程安全的擴展方法,並堅持這些方法,但只有當你不必將DataSet傳遞給第三方庫,它將直接訪問它。