我知道公认的做法是在工作单元模式中使用 DataContext,但我从 MSDN 中看到了这个声明:
此类型的任何公共静态(在 Visual Basic 中为 Shared)成员都是线程安全的。不保证任何实例成员都是线程安全的。
当我读到它时,如果 DataContext 被声明为静态它是线程安全的。
http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx
我知道公认的做法是在工作单元模式中使用 DataContext,但我从 MSDN 中看到了这个声明:
此类型的任何公共静态(在 Visual Basic 中为 Shared)成员都是线程安全的。不保证任何实例成员都是线程安全的。
当我读到它时,如果 DataContext 被声明为静态它是线程安全的。
http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.aspx
不,这是不正确的。
这就是说,DataContext
它本身的静态成员是线程安全的——而不是它的静态实例。
请注意,这几乎是 .NET 中大多数类的标准。(允许对“大多数”的含义存在分歧)。我没有立即意识到DataContext
.
恰恰相反。
实例成员不是线程安全的。但是您将从同一个共享实例访问实例成员。
但是,即使对象是线程安全的,也要考虑增长的 1 级缓存对长期存在的数据上下文的影响。很少有线程和几十/数百/数千个并发调用,您的实例可能会耗尽内存。相反,您应该在对象完成工作后将其处置。