SqlConnection的Dispose方法是否会干扰连接池?

时间:2011-07-20 17:09:21

标签: .net asp.net database vb.net connection-pooling

根据我的理解,.Net将汇集SqlConnection个默认情况下连接字符串相同的对象。如果我调用Dispose方法,连接是否仍然会被合并?

在ASP.NET应用程序的上下文中询问此问题,该应用程序有时会在单个PageLoad事件中对数据库进行多次点击。我希望将连接汇集在一起​​,但是希望确认在数据操作完成后关闭和处理连接不会干扰.NET对连接池的处理。

3 个答案:

答案 0 :(得分:10)

使用连接池时,关闭SqlConnection只会告诉连接池您已完成连接池。然后,池将决定是否实际关闭连接,或重新使用它。

来自MSDN docs

  

如果SqlConnection超出范围,则不会关闭。因此,您必须通过调用Close或Dispose显式关闭连接。关闭和处置在功能上是等效的。如果连接池值Pooling设置为true或yes,则将基础连接返回到连接池。另一方面,如果Pooling设置为false或no,则关闭与服务器的基础连接。

答案 1 :(得分:3)

SQL Server Connection Pooling 上的MSDN文档说

  

关闭时,连接会被释放回池中   设置

  

我们强烈建议您始终关闭连接   完成使用它,以便连接将返回到   池。您可以使用的Close或Dispose方法执行此操作   连接对象......

此外,连接池将决定是否从池中删除连接

  

连接池在拥有后从池中删除连接   已经空闲了很长时间,或者如果小便者检测到了   已切断与服务器的连接

答案 2 :(得分:1)

  

据我了解,.Net将汇集SqlConnection对象

不,SQL提供程序将基础连接汇集到SQL Server(基于连接字符串的单独池)。

SqlConnection对象将在调用Open时获得池连接(或基于配置用于池的内容创建新连接,是否可用池连接),并将释放调用CloseDispose时的连接。

这两个概念(SqlConnection对象和与SQL Server的实际连接)是截然不同的,但显然有些相关。