【问题标题】:.net connection pooling.net 连接池
【发布时间】:2019-01-03 19:53:33
【问题描述】:
我不明白常规连接和连接池之间的语法区别是什么。
当我使用using 键时,例如:
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
command.ExecuteNonQuery();
}
这是执行连接池的方式吗?
【问题讨论】:
标签:
c#
.net
ado.net
connection-pooling
【解决方案1】:
使用 SqlConnection 将连接池的管理从您那里抽象出来,就像上面一样。默认情况下,ADO.NET 连接池是打开的,您可以进一步控制它,例如将其关闭或控制连接字符串中的池大小,例如
关闭
Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Pooling=false;
或控制最小值和最大值
Provider=SQLOLEDB;Data Source=localhost;Integrated Security=SSPI;Min Pool Size=5; Max Pool Size=20;
更多细节解释和验证池的方法
http://www.codeproject.com/KB/dotnet/ADONET_ConnectionPooling.aspx
【解决方案2】:
您不是通过连接而是通过连接字符串来控制连接池。大多数 ADO 提供程序默认使用池化。
using 语句用于调用对象(在本例中为连接类)的Dispose 方法。通过这样做,连接要么返回到池中,要么根据连接字符串配置断开连接。
您还应该注意,如果正在使用分布式事务,则连接不会直接返回到池中(.Net 4 中的TransactionScope)。事务完成/回滚时返回连接。
如果您不使用using,您应该确保尽快致电Connection.Close()。特别是如果您的应用程序处于某种形式的负载之下。
【解决方案3】:
SQL 连接默认为连接池。
(最大池大小=100)
您可以从连接字符串配置您的连接池。
你可以从here找到更多关于连接字符串的信息。
【解决方案4】:
据我所知,
连接池由 ado.net 客户端管理,因为与 db 建立连接是一项昂贵的操作。 ado.net 建立连接池,每当您需要连接时,它都会尝试从池中提供连接。即使您对客户端代码说要关闭连接,ado.net 也会保留该连接以供以后使用。你不管理池
连接池在应用程序的 web.config 文件中被告知。当您使用 using 语句时,您会告诉该对象应该在使用结束时被处置。
【解决方案5】:
您可以阅读连接池here。
基本上只要连接字符串相同(包括大小写),就会从同一个连接池中获取连接。