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