与之关联的连接池是什么?

时间:2009-05-17 21:57:02

标签: .net connection-pooling

我正在阅读.net中的连接池,我不确定我是否正确。他们说关闭的连接会返回到池中,以便以后可以重用。但与之相关的游泳池是什么?它是数据库还是仅仅是应用程序环境(计算机在其上执行)?如果是后者,那么如果你有两个用户在两台不同的计算机上打开他们的应用程序并且一个接一个地请求相同的连接,那么连接池没有区别,我是对的吗?

编辑:当然我知道如果同一个应用再次打开相同的连接会有所不同,但是同一个应用的两个不同实例呢?

3 个答案:

答案 0 :(得分:3)

连接池仅限于客户端PC,并与连接字符串和身份验证详细信息相关联。

因此,如果连接关闭并返回到池,则只有在连接字符串和身份验证详细信息完全匹配时才会重用它。

答案 1 :(得分:2)

连接池只是客户端上的一个集合,当您第一次尝试打开与数据库的连接时,它会被连接填满。如果您已完成连接对象的处理,则不会将其处理,而是返回到可用连接的集合。

这样可以提高性能,因为打开和关闭数据库连接可能非常昂贵(考虑建立连接所需的网络流量)。

这是关于该主题的一个很好的启动教程:

http://www.eggheadcafe.com/tutorials/aspnet/df2b05d8-93ea-49e1-aeaa-d116a4d6ac3b/adonet-connection-poolin.aspx

答案 2 :(得分:1)

ConnectionPoolCollection实际上是一个包含ConnectionPool对象的单例对象。

您可以通过反映DbConnection上的静态函数来清除单个池或清除所有池,从而对此进行测试。

ClearAllPools - 清除SQL Server中DbConnection的所有池。

由于对象是单例,因此它不能跨进程边界工作。每个进程最终会有一个池。

有些ADO.NET提供程序可以通过使用COM对象来保存实例引用,从而跨应用程序进程进行池化,但大多数都不这样做。