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