如何跨多个线程处理Linq-to_SQL DataContext?
我应该创建一个全局静态DataContext,所有线程都使用并在最后提交更改,还是应该为每个线程创建一个Context并将该实例用于该线程内的所有内容?
答案 0 :(得分:15)
DataContext
不是线程安全的;直接从多个线程使用它会导致#fail;拥有全局静态数据上下文会导致#fail 和会导致不受控制的内存增长(数据上下文包含一个身份管理器和更改跟踪器,用于获取的每个对象;只有增长随着时间的推移,触摸更多的物体)
理想情况下,数据上下文应用于工作单元;旋转一下;做某事(在范围内绑定 - 即不是整个应用程序生命周期),并处置它。所以IMO真正的答案是“将它与工作单元联系起来”。只有您可以知道您的申请中的内容;它可以是单个方法,它可以是网页上的页面请求,也可以是服务中的“滴答”计时器。谁知道......