【发布时间】:2009-03-26 20:10:58
【问题描述】:
我遇到了一个 Web 应用程序的问题,它耗尽了连接池中的所有可用连接。我似乎还记得一些用于诊断所有活动连接的好工具,但我是空白。诊断此问题有哪些好的选择?
【问题讨论】:
标签: .net sqlconnection
我遇到了一个 Web 应用程序的问题,它耗尽了连接池中的所有可用连接。我似乎还记得一些用于诊断所有活动连接的好工具,但我是空白。诊断此问题有哪些好的选择?
【问题讨论】:
标签: .net sqlconnection
您是否在应用程序中使用 SqlDataReader 对象? SqlDataReader 对象将保持其连接打开,直到关闭。
【讨论】:
.Net memory profiler of WinDbg with SOS 将允许您追踪谁持有对您的连接对象的引用,使用该信息您应该能够追踪有问题的方法。
【讨论】:
我投票支持代码审查。我曾经在第三方构建的应用程序中遇到过类似的情况,并且搜索连接很快就会暴露它并没有使用/最终确保在发生异常时关闭连接。
正如 Michael 所指出的,您必须确保数据读取器使用的连接已关闭。您可以指定在阅读器关闭时关闭连接,然后对于这些情况,只需确保数据阅读器已被释放(使用 using(){} )
【讨论】:
您可以运行 sp_who 来查看来自 SQL 服务器的活动连接,但是,您可能没有像其他人建议的那样关闭您的连接。但是,如果您正在关闭连接,但立即重新打开它们(例如在循环中读取文本文件或其他内容),即使您认为正在关闭它们,您也可以使用它们(查看Connection Pooling)。如果您发布代码示例,我认为您会得到更好的答案。
【讨论】: