3

我有一个 ASP.NET Web 应用程序,它偶尔会返回以下令人讨厌的错误:

超时已过。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且达到了最大池大小。

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

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

4

1 回答 1

1

一堆不同的选择:

  • 使用 Resharper 及其“模式搜索”(也称为“结构搜索”):http: //blogs.jetbrains.com/dotnet/2010/04/introducing-resharper-50-structural-search-and-replace/

  • 为 FxCop 或 Roslyn 编写一个微型语法树遍历器来执行相同的搜索(基本上,一个新的 SqlConnection 没有被释放)

  • 为 SqlConnection 编写一个包装类(比您想象的更常见),并在其中跟踪打开/关闭的连接。

  • 将 WinDbg 附加到“实时”或理想的错误应用程序,然后将堆对象返回到它们的根。

  • 找一个合适的分析器(SciTech 是一个很好的分析器),它会为您提供用于创建对象的调用堆栈。

于 2012-10-02T05:41:36.857 回答