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