在我们的项目中,我使用LINQ to SQL进行各种数据库交互。现在从我所知,当我创建和使用DataContext对象时:它打开连接,创建事务,执行查询并关闭连接。
我们偶尔会在服务和服务器上收到连接池错误。
“从池中获取连接之前已经过了超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。”
有什么想法吗?我完全离开了吗?这与SQL Server本身有关吗?
我们正在使用LINQ,.Net 3.5和Sql Server 2008
注意:在系统中任何地方都没有使用DATAREADER。
由于
答案 0 :(得分:6)
见这里:
When should I dispose of a data context
我引用Jon Skeet在这里引用其他人的话,但这对我来说也是一个惊喜,因为我们遇到了类似的问题。
自动关闭的逻辑 DataContext连接可以 欺骗离开连接 打开。 DataContext依赖于 应用程序代码枚举所有 到达后的查询结果 结果集的结尾触发了 连接关闭。如果 应用程序使用IEnumerable MoveNext方法而不是foreach 在C#或VB中声明,你可以退出 过早的枚举。如果你的 应用程序遇到的问题 连接没有关闭和你 怀疑自动关闭行为 不工作你可以使用Dispose 模式作为一种解决方法。
基本上,datacontext关闭自身的机制并不是防弹的。我已经采取手动关闭它,这解决了我们的问题。