我有一个 ASP.NET 的Web应用程序,它偶尔会返回以下令人恼火的错误:
超时已过期。在获取 从池连接。这可能是因为所有池化 连接正在使用中,已达到最大池大小。
我的经理怀疑这是因为应用程序中存在未关闭的SqlConnection
。因此,我目前正在手动检查应用程序中的每个代码文件,以查看是否有任何连接保持打开状态。
有没有更快的解决方案来找到此错误的根源?
一堆不同的选项:
-
使用 Resharper 及其"带模式的搜索"(也称为"结构搜索"(: http://blogs.jetbrains.com/dotnet/2010/04/introducing-resharper-50-structural-search-and-replace/
-
为 FxCop 或 Roslyn 编写一个微型语法树查看器来执行相同的搜索(基本上,一个新的 SqlConnection 未释放(
-
为 SqlConnection 编写一个包装类(比您想象的更常见(,并跟踪其中的打开/关闭连接。
-
将 WinDbg 附加到"实时"或理想情况下出错的应用程序,并将堆对象重新定位到它们的根基位置。
-
获取一个合适的分析器(SciTech 是一个简洁的(,它将为您提供用于创建对象的调用堆栈。