[英]connection leak issue in SQL Server
我使用的是SQL Server 2008 Enterprise + C#+ ADO.Net + .Net 3.5。 我在ADO.Net客户端使用连接池(ADO.Net的默认行为)。 我正在使用sp_who2或sys.dm_exec_connections查找活动连接数(如果我找到有效连接数的方法错误,请告诉我)。
如果每次创建并打开一个新的ADO.Net连接对象后,我将使用匹配的close语句在使用连接对象后关闭ADO.Net连接对象实例(执行存储过程),我想知道在这种情况下,从我的ADO.Net客户端应用程序关闭所有连接后,活动连接数应始终为0,如果显示活动连接数> 0,它应该是非常奇怪的?
乔治,提前谢谢
关闭将释放连接以用于连接池 。 这并不意味着物理连接已关闭。
还要确保.close在finally中,因此它在常规流和异常发生时执行。
确保正确关闭或处置SqlConnection
。 处置连接将自动关闭它。
using(SqlConnection connection = new SqlConnection(connectionString))
{
} //The connection will close automatically here
但是你可以明确地在使用结束之前做一个.Close()。
您还可以通过调用清除状态为Awaiting Command的所有挂起连接
SqlConnection.ClearAllPools();
不是这样,ADO.NET连接池将在调用Close后返回到池的连接。 此时连接可能不会真正关闭。 要强制关闭连接,请在关闭之前清除池。 试试这个,你应该看到从服务器关闭连接。
var conn = new SqlConnection("a server goes here");
conn.Open();
SqlConnection.ClearAllPools();
conn.Close();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.