c# - 这真的是您使用 Linq-To-Sql 的方式吗?

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

我在这里看到了一个关于 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 在将来进行垃圾收集会增加更多的开销?

最佳答案

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

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

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

关于c# - 这真的是您使用 Linq-To-Sql 的方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4709798/

相关文章:

C# TCP 套接字性能随着应用程序运行而下降

c# - 如何防止在增量构建期间删除内容文件?

asp.net - 为什么这个加载 gif 布局问题

asp.net - 如何从 json 响应中删除字符串节点

c# - 带有 lambda 表达式的字典

c# - 如何在 DateTime 中将时间设置为零?

c# - 尽管已声明 !IsPostBack 已声明,但分数整数卡住了

python - Divio Cloud 本地 Docker 数据库连接

php - 在 PHP 中读取电子邮件并将数据保存到数据库

sql - 使用 '!=' 运算符加入