我在这里看到了一个关于 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/