我有一个 ASP.NET Web 应用程序,它偶尔会返回以下令人讨厌的错误:
超时已过。在从池中获取连接之前超时时间已过。这可能是因为所有池连接都在使用中并且达到了最大池大小。
我的经理怀疑这是因为SqlConnection
应用程序中未关闭。因此,我目前正在手动检查应用程序中的每个代码文件,以查看是否有任何连接处于打开状态。
是否有更快的解决方案来找到此错误的根源?
我有一个 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 是一个很好的分析器),它会为您提供用于创建对象的调用堆栈。