在连接上调用dispose后,为什么连接数没有减少?

时间:2013-08-07 01:18:41

标签: c# sql-server

运行此代码时,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。

2 个答案:

答案 0 :(得分:4)

SQL Server使用连接池是出于性能原因。这意味着即使通过调用dispose,您的连接也将保持活动状态。

尝试致电: SQLConnection.ClearAllPools();

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

SqlConnection.ClearPool(ObjSqlConnection);

答案 1 :(得分:-1)

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

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

也许您可以为Usingconnection使用sqlCommand阻止。