c# - 在 C# 中创建新的 SqlConnection 的开销

标签 c# .net database sqlconnection

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

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 block 的末尾调用 Close(),它会自动为您完成 (Dispose==Close)。

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

相关文章:

c# - 表单提交后清除(重置)表单字段(数据)

c# - HttpClient 和 ReadAsAsync<T>() 扩展方法

c# - 为什么 C# 中没有 System.DateTime 的 "date"简写?

java - Apache Derby - 检查数据库是否已创建?

database - Cassandra 中最终一致性的含义?

c# - 通用列表的接口(interface)继承

C# ComboBox 项目不显示

.net - 为什么 "Non"中的 "ExecuteNonQuery"?

javascript - 使用 Ajax 和 PHP 将文件上传到数据库

c# 加密,得到 .der 和 .pem 文件作为输入