跨多种方法使用 SQLConnection(“using”关键字 yes 或 no)
本文关键字:关键字 using yes no 方法 SQLConnection | 更新日期: 2023-09-27 17:56:37
我想在类中重复使用相同的SQLConnection不同的方法。我现在正在做的(仅测试)是在构造函数中创建并打开连接:
SQLConnection Connection;
Constructor(string connection_string)
{
this.Connection = new SqlConnection(connection_string);
this.Connection.Open();
}
然后我使用"这个。连接"里面的方法,最后用这个。Connection.Close() 和 Dispose() 在不再需要该对象时。据我所知,在每个方法中使用"using"会更干净,例如(构造函数只会设置connection_string):
using (SqlConnection connection = new SqlConnection(connection_string)) {
connection.Open(); ...
}
由于连接池,实际上只使用了一个连接,尽管上面的"using"行被放置在多个方法中(例如,当它们一个接一个地调用时),对吗?但是,这不会创建许多只需要一个的 SQLConnection 实例吗?例如:
MyClass obj(some_string);
obj.Method1(); // calls 'using SqlConnection connection = new SqlConnection'
obj.Method2(); // calls 'using SqlConnection connection = new SqlConnection'
obj.Method3(); // calls 'using SqlConnection connection = new SqlConnection'
那么,共享 SQLConnection 的正确、最佳方法是什么?
你所有的陈述都是正确的。但是,您错过了重要的一点:在 .NET 中创建大量类型的实例并不一定是一件坏事!
- 不应在构造函数中创建单个连接实例
- 应在需要时在本地创建连接
-
最佳做法是在创建一次性对象时使用
using
范例 -
你应该养成在
try...finall
块中的一次性对象上调用 Dispose 的习惯(如果不使用using
) - 以防您的特定场景不适合使用usings
;例如使用异步方法) - 最后,保持 SQL 连接打开的时间不应超过您需要的时间。同样,只需利用 SQL Server ADO.NET 提供程序中的连接池
现在,创建大量连接类型的实例不是问题的原因是,在 .NET CLR 中创建对象经过优化(快速内存分配和对象实例化)并且相对无痛(无需担心由于垃圾回收而释放内存)。对于 ADO.NET 提供程序,您还可以获得连接池的好处,因此实际上,您不必担心管理此类型的实例数。
很明显,在其他情况下(例如重型/大型对象),创建大量对象会对内存压力和性能产生影响。所以总是尽可能地评估情况。