非单例sql连接的性能更好吗?

时间:2015-09-18 06:46:39

标签: c# singleton database-connection

这是一个跟进问题:Is it necessary to deconstruct singleton sql connections?

正如一些评论所说,使用单例进行sql连接而不是多次使用是不好的设计。

虽然有一个声明表明使用变体的性能更好而不是单身变体的表现。现在正如我所说,这是一个糟糕的设计我很清楚(我知道那里的单身人士的利弊最多......尤其是缺点)。令我惊讶的是表现声明。

正如我通常认为的那样:在程序运行期间打开和关闭sql连接100-1000次应该不如只执行一次这样的性能。因此,我的问题是:非单身变体的表现是否真的更好,如果是,为什么?

Singletonexample:

public class SimpleClass
{
    // Static variable that must be initialized at run time. 
    public static SqlConnection singletonConnection;

    // Static constructor is called at most one time, before any 
    // instance constructor is invoked or member is accessed. 
    static SimpleClass()
    {
        singletonConnection = new SqlConnection("Data Source.....");
    }
}

用法示例:

using (SqlConnection connection = new SqlConnection("Data ...")) 
{
  ....
}

1 个答案:

答案 0 :(得分:2)

基本上答案很简单:

  

连接到数据库服务器通常包含几个   耗时的步骤。物理通道,例如套接字或命名   必须建立管道,与服务器的初始握手必须   发生时,必须解析连接字符串信息   连接必须由服务器进行身份验证,必须运行检查   参与当前交易,等等。在实践中,大多数   应用程序仅使用一种或几种不同的配置   连接。

     

这意味着在应用程序执行期间,很多   相同的连接将重复打开和关闭。至   最小化打开连接的成本,ADO.NET使用优化   称为连接池的技术。

你不应该使用单身作为某种“性能加速器”,因为它不是它的用途。通过使用它来存储一个静态SQL连接,您将面临许多内存和连接问题。你应该如何关闭连接?你应该如何释放消耗的内存?当一个连接关闭时,您将为所有应用程序用户关闭它。你打算如何重新联系这种方法?

“连接池”基本上意味着即使您创建了许多SqlConnection个对象,只要它们与连接字符串没有区别,就可以重用现有连接。

可以找到一些详细信息there