Linq to Sql会自动关闭连接吗?或者我应该使用using
?
var db = new DataContext();
// Codes
或
using (var db = new DataContext())
{
// Codes
}
答案 0 :(得分:2)
当您使用using
语句时,将自动管理连接。DataContext
类实现IDisposable
接口,因此您需要在{上调用Dispose完成后,{1}}实施。
我们实施IDisposable有几个原因:
- 如果应用程序逻辑需要保留超出预期使用DataContext或有效的实体,则可以强制执行 通过调用Dispose进行合同。该实体中的延期装载机将为 仍在引用DataContext,如果有的话,会尝试使用它 代码尝试导航延迟属性。这些尝试
将失败。 Dispose还强制DataContext转储其缓存 物化实体,以便单个缓存实体不会 意外地保持通过该实体实现的所有实体 DataContext,否则会导致看似记忆的内容 泄漏。- 可以欺骗自动关闭DataContext连接的逻辑,使连接保持打开状态。 DataContext依赖 在应用程序代码上枚举查询的所有结果 到结果集的末尾会触发连接关闭。 如果应用程序使用IEnumerable的MoveNext方法而不是a 在C#或VB中使用foreach语句,可以退出枚举 过早。如果您的应用程序遇到问题 连接没有关闭,你怀疑自动关闭 行为不起作用你可以使用Dispose模式作为工作 周围。
答案 1 :(得分:1)
using
版本是您可以做的最好的。底层连接没有关闭,这是一件好事。连接保存在池中,以便它们可以回收利用。
请勿将代码关闭与实际的基础物理连接混淆。
您必须关闭连接,处理此问题的最佳方法(最佳做法)是using
语句。