为什么不';t在连接上调用dispose后,连接数会减少

本文关键字:连接 dispose 为什么不 调用 | 更新日期: 2023-09-27 18:26:37

运行此代码时,到数据库的连接数在connection.Open()之后增加到3。为什么在connection.Close()之后它不返回到2?

private static void AdoNetStuff()
{
    var connection = new SqlConnection(@"Initial Catalog=abook;server=.'SqlExpress;Integrated Security=true");
    var sqlCommand = new SqlCommand("SELECT TOP 10 * FROM dbo.Entity", connection);
    connection.Open();
    sqlCommand.ExecuteReader();
    sqlCommand.Dispose();
    connection.Dispose();
    connection.Close();
}

上面的代码在控制台应用程序中,在我的控制台应用程序关闭之前,连接数不会降回2。

这就是我检查连接数的方法。

SELECT DB_NAME(dbid) as DBName, COUNT(dbid) as NumberOfConnections, loginame as LoginName
FROM sys.sysprocesses
WHERE dbid > 0 AND DB_NAME(dbid) = 'abook'
GROUP BY dbid, loginame

在结束控制台应用程序之前,我可以等待一段时间,我仍然有3个连接。我一结束应用程序,连接数就会回落到2。

为什么不';t在连接上调用dispose后,连接数会减少

SQL服务器出于性能原因使用连接池。这意味着即使您调用了dispose,您的连接也将保持活动状态。

尝试呼叫:SQLConnection.ClearAllPools();

要只清除当前连接,请尝试调用:

SqlConnection.ClearPool(ObjSqlConnection);

似乎是在关闭之前进行处理-在将对象变量设置为Nothing之前,.Dispose应该是对一次性对象所做的最后一件事。

通过在关闭命令和/或连接之前先处理它,可以保持连接处于打开状态。

也许您可以将Using块用于connectionsqlCommand