4

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

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

4

3 回答 3

3

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

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

于 2009-05-17T22:00:41.737 回答
2

连接池只是客户端的一个集合,当您第一次尝试打开与数据库的连接时,它会充满连接。如果您使用完连接对象,它不会被释放,而是返回到可用连接的集合中。

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

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

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

于 2009-05-17T22:06:46.903 回答
1

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

您可以通过反射 DbConnection 上的静态函数来测试这一点,以清除单个池或清除所有池。

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

由于该对象是一个单例,它不能跨进程边界工作。您最终将得到每个进程一个池。

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

于 2009-06-09T21:42:29.993 回答