这真的是你如何使用Linq-To-Sql?

Con*_*der 2 c# database asp.net performance linq-to-sql

我在这里看到了一个关于Linq-To-Sql的有趣链接: 更高效的数据库访问

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

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

protected WriteLog(String activity)
{
   using (DataClassesDataContext db = new DataClassesDataContext())
   {
       ... Do db write with Linq
   }
}
Run Code Online (Sandbox Code Playgroud)

这是一个使用非常频繁的功能,在任何时候至少有50个呼叫/秒.所以在我假设我们遭遇潜在的"泄漏"之前,这是一个问题.但现在我们似乎不会泄漏数据库资源,而是我们将花费大量时间来打开和关闭数据库连接.这不可能是对的,可以吗?上面的代码现在是否为我们的用户打开和关闭每个日志条目的数据库连接,增加了更多的开销,而不仅仅是让DataClassesDataContext在将来被垃圾收集?

Ada*_*son 5

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

话虽这么说,上下文类是轻量级的(数据库连接对象也是如此).您的连接会自动进行池化,因此数据库连接对象与实际数据库连接之间的比率不一定是1:1.

通过将类封闭在使用块中来正确处理类,您现在正确使用它(没有双关语).