2

我知道公认的做法是在工作单元模式中使用 DataContext,但我从 MSDN 中看到了这个声明:

此类型的任何公共静态(在 Visual Basic 中为 Shared)成员都是线程安全的。不保证任何实例成员都是线程安全的。

当我读到它时,如果 DataContext 被声明为静态它是线程安全的。

http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx

4

2 回答 2

6

不,这是正确的。

这就是说,DataContext它本身的静态成员是线程安全的——而不是它的静态实例。

请注意,这几乎是 .NET 中大多数类的标准。(允许对“大多数”的含义存在分歧)。我没有立即意识到DataContext.

于 2013-01-17T20:40:15.413 回答
1

恰恰相反。

实例成员不是线程安全的。但是您将从同一个共享实例访问实例成员。

但是,即使对象是线程安全的,也要考虑增长的 1 级缓存对长期存在的数据上下文的影响。很少有线程和几十/数百/数千个并发调用,您的实例可能会耗尽内存。相反,您应该在对象完成工作后将其处置。

于 2013-01-17T20:45:29.507 回答