【问题标题】:Is this really how you use Linq-To-Sql?这真的是您使用 Linq-To-Sql 的方式吗?
【发布时间】:2011-01-17 03:29:46
【问题描述】:

我在这里看到了一个关于 Linq-To-Sql 的有趣链接: More efficient database access

查看我自己的代码,我意识到我也没有处理过DataClassesDataContext。这是一个问题吗?我不知道,但我搜索了我的代码并在我的代码中添加了using (DataClassesDataContext db = new DataClassesDataContext())

现在,有趣的事情来了。我们在代码中记录了几乎每个页面访问和事务。所以我现在有一个看起来像这样的代码块:

protected WriteLog(String activity)
{
   using (DataClassesDataContext db = new DataClassesDataContext())
   {
       ... Do db write with Linq
   }
}

这是一个使用频率很高的函数,任何时候至少每秒调用 50 次。因此,在我假设我们遭受潜在的“泄漏”之前,这是一个问题。但现在看来我们不会泄漏数据库资源,而是会花费大量时间来打开和关闭数据库连接。这不可能是对的,不是吗?上面的代码现在是否为我们用户的每一个日志条目打开和关闭一个数据库连接,这比仅仅让 DataClassesDataContext 在将来被垃圾收集更多的开销吗?

【问题讨论】:

    标签: c# asp.net database performance linq-to-sql


    【解决方案1】:

    您的问题有一个错误的前提:您假设通过不处理您正在为其他用户打开连接的上下文。这是不正确的。您所做的只是将连接的 关闭 推迟到垃圾收集;如果它们正在实例化上下文,后续请求将总是打开一个新连接。

    话虽如此,上下文类是轻量级的(数据库连接对象也是如此)。您的连接是自动池化的,因此数据库连接对象和实际数据库连接之间的比例不一定是 1:1。

    通过将类包含在 using 块中来正确处理类,您现在可以正确使用它(不是双关语)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      相关资源
      最近更新 更多