为什么不';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。
SQL服务器出于性能原因使用连接池。这意味着即使您调用了dispose,您的连接也将保持活动状态。
尝试呼叫:SQLConnection.ClearAllPools();
要只清除当前连接,请尝试调用:
SqlConnection.ClearPool(ObjSqlConnection);
似乎是在关闭之前进行处理-在将对象变量设置为Nothing
之前,.Dispose
应该是对一次性对象所做的最后一件事。
通过在关闭命令和/或连接之前先处理它,可以保持连接处于打开状态。
也许您可以将Using
块用于connection
和sqlCommand
。