查找未关闭的SqlConnection的最快方法

时间:2012-05-18 15:47:48

标签: asp.net timeout connection-timeout

我有一个ASP.NET Web应用程序偶尔会返回以下内容,令人恼火,错误:

  

超时已过期。在获得a之前经过了超时时间   从游泳池连接。这可能是因为所有人都集中了   正在使用连接并达到最大池大小。

我的经理怀疑这是因为应用程序中有一个未关闭的SqlConnection。因此,我目前正在手动检查应用程序中的每个代码文件,以查看是否有任何连接处于打开状态。

是否有更快的解决方案来查找此错误的根源?

1 个答案:

答案 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是一个整洁的探测器),它将为您提供用于创建对象的调用堆栈。