不久前,我为.net应用程序编写了一个ORM层,其中所有数据库行均由DatabaseRecord的子类表示。有许多方法,例如Load()Save()等。在我的初始实现中,我在DatabaseRecord的构造函数中创建了与数据库的连接,例如

connection = new SqlConnection(
    ConfigurationManager.ConnectionStrings["ConnectionName"].ConnectionString
);

然后,在访问数据库的方法的开头和结尾,我在该SqlConnection上调用Open()Close()。在我看来(这是一位熟悉编程但不熟悉C#和.net的人)是做事的最有效方法-建立一个连接,并在课堂上必要时打开/关闭它。

不过,我一直在阅读,似乎建议在许多地方使用此模式:
using (var connection = new SqlConnection(...)) {
    connection.Open();
    // Stuff with the connection
    connection.Close();
}

我可以看到为什么这样是合乎需要的-即使您在中间进行的操作导致未捕获的异常,连接也会自动Dispose() d。我只是想知道这样多次调用new SqlConnection()的开销是多少。

连接池处于启用状态,因此我认为开销很小,第二种方法应该是最佳实践,但我只是想确保自己的假设正确。

最佳答案

是的,这是最佳做法。 using使您对Close()的调用异常安全。

创建(任何)对象的开销确实是最小的,而对于短期对象(保留在GC生成0中)来说,开销最小。

请注意,您不再需要在using块的末尾调用Close(),它会自动为您完成(Dispose == Close)。

关于c# - 在C#中创建新的SqlConnection的开销,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2019993/

10-12 00:42