不久前,我为我的 .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/