我在ASP.net,SQL 2005中继承了一个非常大的项目,并发现了一些SQL连接没有关闭的地方 - 这很糟糕。没有通过每行代码,是否有办法检测连接是否未被关闭?表演柜台?作为后续行动 - SQL如何回收未关闭的连接。我正在使用非池连接字符串。
答案 0 :(得分:4)
可能一个内存分析器是你最好的选择 - 尝试找出(丢失和未处理)连接的来源。
对我来说看起来真的很糟糕 - 因为在我写过的所有asp.net应用程序中,只在代码中的一个点处理连接。似乎有人在这里传播了所有这些。
一个提示可能是:从那些陈旧的连接中查看SQL。您应该能够检索最后一个sql语句,这可能会给您一个提示它们的起源。
答案 1 :(得分:3)
我知道你说你不想通过每一行代码,但由于连接可以传递(或不传递),你可能没有多少选择。可能有用的东西是使用这个正则表达式(仅在VS查找窗口中有效):
//matches any constructor call to SqlConnection
new:Zs*(System.)*(Data.)*(SqlClient.)*SqlConnection(\([0-9a-zA-Z]*\))
这将帮助您找到连接初始化,这可能有助于加快速度。我认为TomTom是正确的,因为你可能正在处理具有高圈复杂度的糟糕代码,因此如果没有目视检查,你可能找不到所有情况。小心检查连接是否被传递。你可能会有一个痛苦的重构,但我保证它会在黑桃中得到回报。
祝你好运,希望这会有所帮助!