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

2024-01-04

这是以下问题的后续问题:是否需要解构单例sql连接? https://stackoverflow.com/questions/32645209/is-it-necessary-to-deconstruct-singleton-sql-connections

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

不过,令我感兴趣的是一种说法,即 using 变体的性能是better比单例变体。现在,正如我所说,我很清楚这是一个糟糕的设计(我知道单身人士的大多数优点和缺点......尤其是缺点)。但令我惊讶的是业绩声明。

通常我会想:在程序运行期间打开和关闭 sql 连接 100-1000 次应该比只执行一次性能要差。因此我的问题是:非单例变体的性能真的更好吗?如果是的话为什么?

单例示例:

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 ...")) 
{
  ....
}

基本上答案很简单:

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

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

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

“连接池”的基本含义是,即使您创建了许多连接SqlConnection对象,只要它们与连接字符串不不同,就可以重用现有的连接。

可以找到一些详细信息there https://msdn.microsoft.com/en-us/library/8xx3tyca.aspx.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

非单例sql连接的性能更好吗? 的相关文章

随机推荐