【问题标题】:Quickest method of finding unclosed SqlConnection's查找未关闭 SqlConnection 的最快方法
【发布时间】:2012-05-18 15:47:48
【问题描述】:

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

超时。在获得一个之前的超时时间 来自池的连接。这可能是因为所有汇集的 正在使用连接并且已达到最大池大小。

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

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

【问题讨论】:

  • 如何在运行页面时找到打开的连接并查看它们是否保持稳定或增加? stackoverflow.com/questions/216007/…
  • 我会检查服务器以查看是否有一堆打开的连接,然后启用探查器几分钟以查看服务器上打开的连接发出的最后几个命令。希望看到最后的命令会给你一个线索来查看你的代码。

标签: asp.net timeout connection-timeout


【解决方案1】:

一堆不同的选项:

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

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

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

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

  • 获取一个合适的分析器(SciTech 是一个简洁的分析器),它将为您提供用于创建对象的调用堆栈。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 2013-01-19
    • 2013-10-05
    • 2021-09-25
    相关资源
    最近更新 更多