C# SQLConnection 池

Posted

技术标签:

【中文标题】C# SQLConnection 池【英文标题】:C# SQLConnection pooling 【发布时间】:2011-05-26 08:50:41 【问题描述】:

谁能告诉我如何在 ADO.Net 中进行连接池,我确实需要连接到 3 个独立的数据库。其中 2 个在同一服务器中,另一个在单独的服务器中。

使用代码片段更好..

【问题讨论】:

【参考方案1】:

只要您对处理连接有严格要求,默认(至少对于 sql-server)是它会自动工作。在您的示例中,您很可能只有 3 个 基础 连接(每个连接字符串一个)。

始终确保您的连接已处理完毕,最好使用using

using(var conn = new SqlConnection(connectionString)) 
    // use conn

然后即使抛出异常,它也会被释放回池中(以便在下次看到相同的连接字符串时重新使用)。

禁用池(如果您选择),请在连接字符串中包含Pooling=false;

【讨论】:

明确一点,当conn以这种方式处理时,您不需要conn.Close();【参考方案2】:

某些提供商提供连接池。据我所知,这包括与 Microsoft Access 数据库 (Jet) 和 SQL Server CE(精简版)的连接字符串。

缺少连接池使得数据库访问速度显着变慢。

对于缺少 Jet 池的解决方案是,我在整个程序生命周期内始终打开一个与 Jet 数据库的连接(与推荐的技术相反)。这极大地加快了 .NET 应用程序中的 Jet Access 数据库 SQL 查询,但也仅适用于本地 Jet 数据库;对于网络共享上的 Jet 数据库,我得到相对较快的关于打开文件句柄过多的异常。

对于 SQL Server CE,我目前没有找到解决方案。

【讨论】:

【参考方案3】:

不需要特别配置或设置任何东西,让它发生...我见过的大多数问题都是由于人们没有关闭连接或太聪明而引起的

池是根据连接字符串创建的,因此在这种情况下您将拥有三个池

【讨论】:

三个连接还是两个连接?? 每个连接字符串一个。所以即使两个在同一台服务器上,不同的数据库也会使连接字符串不同。

以上是关于C# SQLConnection 池的主要内容,如果未能解决你的问题,请参考以下文章

using(SqlConnection connection=new SqlConnection(connectionString))

using (SqlConnection connection = new SqlConnection(connectionString))

TransactionScope 打破 SqlConnection 池?

C# 在EF中直接运行SQL命令

实体框架 6 错误服务器版本:(System.Data.SqlClient.SqlConnection)customerOrderContext.Database.Connection).Server

OleDbConnection SqlConnection DB2Connection 区别