这是一个跟进问题: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 ..."))
{
....
}
答案 0 :(得分:2)
基本上答案很简单:
连接到数据库服务器通常包含几个 耗时的步骤。物理通道,例如套接字或命名 必须建立管道,与服务器的初始握手必须 发生时,必须解析连接字符串信息 连接必须由服务器进行身份验证,必须运行检查 参与当前交易,等等。在实践中,大多数 应用程序仅使用一种或几种不同的配置 连接。
这意味着在应用程序执行期间,很多 相同的连接将重复打开和关闭。至 最小化打开连接的成本,ADO.NET使用优化 称为连接池的技术。
你不应该使用单身作为某种“性能加速器”,因为它不是它的用途。通过使用它来存储一个静态SQL连接,您将面临许多内存和连接问题。你应该如何关闭连接?你应该如何释放消耗的内存?当一个连接关闭时,您将为所有应用程序用户关闭它。你打算如何重新联系这种方法?
“连接池”基本上意味着即使您创建了许多SqlConnection
个对象,只要它们与连接字符串没有区别,就可以重用现有连接。
可以找到一些详细信息there。