【问题标题】:DataContext Scope Best-PracticeDataContext 范围最佳实践
【发布时间】:2012-07-01 10:49:43
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    如果您将其打开太短,则会浪费性能,因为实例化 DataContext 并不是完全免费的。它很便宜,但可以衡量。它显示在个人资料中。

    如果您将其打开太久,您也会遇到问题:

    1. 对象开始在其中堆积
    2. 无论如何,您不能在多个线程或多个事务中同时使用它
    3. 如果您的某个 SubmitChanges 由于某种逻辑原因失败,则上下文已失效,因为无论您重试多少次,都会永远出现相同的错误

    以下是一些在没有深入了解的情况下绝对不能做的规则:

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

    【讨论】:

    • 跟踪的实体是什么意思?
    • 当您从数据库中查询一个实体时,它会永远保留在您的 DataContext 中。它被跟踪。
    猜你喜欢
    • 2020-06-23
    • 2012-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 2011-05-13
    • 1970-01-01
    相关资源
    最近更新 更多