2010-02-15 58 views
5

什么是最好的模式使数据集线程安全写入?使数据集线程安全的C#

我可以找到的最好的谷歌搜索是'实施与锁'包装层'但乍一看这似乎相当混乱。

有人可以推荐/指向我一个很好的解决方案吗?这似乎是一个已经在某个地方解决的问题。

编辑:我也需要绑定数据集到一个UI网格,这有点复杂的事情。

+0

对不起,数据集很混乱! –

回答

3

“实现带锁的包装层”是要走的路。

包装层可能会使用特定于您的应用程序使用数据集的方式的锁定。

试图设计一类复杂的一个通用的解决方案作为一个DataSet可能是注定要失败的。

例如,枚举属性通常不会是线程安全的 - 因此只要任何调用方正在枚举任何许多集合属性(DataSet.Tables,DataTable.Rows,..),您都需要保持锁定状态。 )。

1

这真的很大程度上取决于所讨论的数据。

如果你处理的整数或引用类型值,则可以Interlocked class优于服用锁。否则,成功同步通常意味着在类中创建锁定内部。

但是,另一种替代方法是使主数据集工作在不可变类型上。然后,您可以在单个线程中处理副本,并仅在主数据集内的替换值处提供同步。这可以避免锁定每个线程的单个副本。

1

用锁实现一个包装层。认真。你不能继承重要的方法,只要它们可用,你的线程安全就可以被破坏。

那么,你也可以实现一组线程安全的扩展方法,并坚持这些方法,但只有当你不必将DataSet传递给第三方库,它将直接访问它。