DataContext Scope Best-Practice

时间:2012-07-01 10:49:44

标签: .net performance linq-to-sql datacontext

使用Linq-to-Sql时,Visual Studio会为您创建一个DataContext类。我想知道什么时候实例化这个上下文,在我的一个项目中,我使用一个DataContext instanse来处理大约300个CRUD命令(整个项目)并且它解决了我稍后设法解决的一个小问题,并且在我最近的项目中我有根据CRUD命令创建了一个实例,现在问题是,使用DataContext的最佳方法是什么?每个命令一个或每个项目一个?或者每个交易一个(我认为这也是一个好主意)? 它在各方面的速度和性能有什么不同吗?

1 个答案:

答案 0 :(得分:4)

如果将它打开得太短,就会浪费性能,因为实例化DataContext并不是完全免费的。它便宜但可测量。它显示在配置文件中。

当你把它打开太久时,你也会遇到问题:

  1. 对象开始在其中累积
  2. 无论如何,您无法在多个线程或多个交易中使用它
  3. 如果您的某个SubmitChanges由于某些逻辑原因而失败,则上下文已经死亡,因为无论您多久重试一次,都会出现相同的错误
  4. 以下是一些规则,如果没有深刻的理解,你永远不应该做的事情:

    1. 为多个HTTP请求/ WCF调用提供一个DataContext
    2. 拥有一个无限时间的DataContext(即桌面应用程序的持续时间)
    3. 为无限数量的跟踪实体提供DataContext
    4. 跨线程使用