繁体   English   中英

检测到SQL的非关闭连接

[英]Detect non-closed connections to SQL

我在ASP.net,SQL 2005中继承了一个非常大的项目,并且发现了一些SQL连接未关闭的地方 - 这很糟糕。 没有通过每行代码,是否有办法检测连接是否未被关闭? 表演柜台? 作为后续行动 - SQL如何回收未关闭的连接。 我正在使用非池连接字符串。

  • Sql不会回收它们。 它们是开放的,直到管理员或 - 从客户端强制关闭。
  • 这将是garbace收集连接对象。

可能一个内存分析器是你最好的选择 - 尝试找出(丢失和非丢弃)连接的来源。

对我来说看起来真的很糟糕 - 因为在我写过的所有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM