静态DataContext线程是否安全?

时间:2013-01-17 20:39:11

标签: c# entity-framework

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

  

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

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

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

2 个答案:

答案 0 :(得分:6)

不,那是正确。

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

请注意,这几乎是.NET中大多数类的标准。 (允许就“最”的含义存在分歧)。我没有立即知道DataContext的任何静态成员。

答案 1 :(得分:1)

恰恰相反。

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

但即使该对象是线程安全的,也要考虑一个不断增长的第一级缓存对长期数据上下文的影响。几个线程和几十个/多个/数千个并发调用和您的实例可能会耗尽内存。相反,你应该在它完成工作后处理它。