gpt4 book ai didi

sql - 使用连接池,正确的方法是什么?

转载 作者:行者123 更新时间:2023-12-02 02:32:21 25 4
gpt4 key购买 nike

今天看到关于那个的问题,但我不确定我是否理解它。同样使用相同的连接字符串会导致它们“共享”连接(如果免费),对吗?那么拥有这样的类是否可以,将其作为引用传递给多线程应用程序中的每个客户端并调用其方法。不管怎样,如果第一个连接上,会不会有短暂的延迟?

 public int(string commandText)
{
SqlConnection con=new SqlConnection(SOME CONSTRING with pooling ON)
...

}

public string(string commandText)
{
SqlConnection con=new SqlConnection(the same CONSTRING with pooling ON)
...
}

最佳答案

当您不再需要它们时,您应该始终处理它们。处理它们不会关闭连接池中的底层连接,而是将其释放回池中。否则连接将保持不可用,直到垃圾收集器开始清理孤立的 SqlConnection 对象。

为了最大限度地利用连接池,您应该始终在 using 语句中包含您的连接:

using (SqlConnection con = new SqlConnection(someConnectionString)
{
...
}

由于底层连接保持打开状态,频繁处理 SqlConnection 对象不会有任何损失。下次您创建 SqlConnection 时,它将选择池中可用的连接之一。

在多线程应用程序中传递连接不是一个好主意,因为多个线程会尝试同时使用它,结果不可预知。一方面,SqlConnection 实例方法不是线程安全的。更糟糕的是,事务是特定于连接的,您最终可能会遇到一个线程扰乱另一个线程的事务。在每个线程中打开一个新连接更加容易和安全。

就开销而言,您在打开新连接时总会有开销,即使使用连接池也是如此。当一个未使用的打开连接已经可用时,池可以节省您创建新连接的开销。如果确保尽快释放连接,则不必创建太多连接。

一旦您开始使用连接池,您可能会惊讶于您的应用程序真正需要的连接是多么少。

关于sql - 使用连接池,正确的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3237011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com