相关疑难解决方法(0)

如何强制SqlConnection在物理上关闭,同时使用连接池?

我知道如果我实例化一个SqlConnection对象,我真的从连接池中获取连接.当我调用Open()时,它将打开连接.如果我在该SqlConnection对象上调用Close()或Dispose()方法,它将返回到连接池.

但是,这并没有真正告诉我它是否真的关闭,或者我是否仍然有一个与数据库的活动连接.

如何强制SqlConnection在网络级别关闭,或者至少告诉它什么时候关闭?

例:

using(SqlConnection conn = new SqlConnection(DBConnString)) {

   conn.Open();
   SqlCommand cmd = conn.CreateCommand();
   ...
   cmd.ExecuteReader(CommandBehavior.CloseConnection);
   ...
}
Run Code Online (Sandbox Code Playgroud)
  • 首次运行:300毫秒
  • 第二轮:100毫秒
  • 第三次运行:100毫秒
  • 等待很长时间(30分钟)后:300毫秒

如果连接是TRULY关闭,则第二次和第三次运行也应该是300 ms.但我知道这些运行并没有真正关闭连接(我检查了SQL Server的活动监视器).它不需要额外的200ms来执行身份验证/等.

如何强制连接真正关闭?

思路

  • CommandBehavior.CloseConnection有效吗?(显然不是?)
  • 在连接字符串中设置"Max Pool Size = 0"是否有效?(这将是一个愚蠢的解决方案)
  • Dispose()有效吗?

参考

c# sql ado.net database-connection connection-pooling

40
推荐指数
3
解决办法
3万
查看次数