我想在类中重复使用相同的SQLConnection accros不同的方法。我现在正在做的事情(仅测试)是在构造函数中创建并打开一个连接:
SQLConnection Connection;
Constructor(string connection_string)
{
this.Connection = new SqlConnection(connection_string);
this.Connection.Open();
}
然后我在方法中使用“this.Connection”,最后在不再需要该对象时使用this.Connection.Close()和Dispose()。据我所知,在每个方法中使用'using'会更加清晰(构造函数只会设置connection_string):
using (SqlConnection connection = new SqlConnection(connection_string)) {
connection.Open(); ...
}
由于连接池,实际上只使用了一个连接,尽管上面的“使用”行放在多个方法中(例如,当它们被一个接一个地调用时),是否正确?但是,这不会创建许多只需要一个的SQLConnection实例吗? E.g:
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的最佳方式是什么?
答案 0 :(得分:4)
您对所有陈述都是正确的。但是你遗漏了一个重点:在.NET中创建大量类型的实例并不一定是坏事!
using
范例最佳做法 try...finall
块中调用Dispose对一次性对象的习惯(如果不使用using
) - 以防您的特定场景无法登陆很好地使用usings
;例如,使用异步方法)现在,创建大量Connection类型实例并不是问题的原因是因为.NET CLR中的对象被优化(快速内存分配和对象实例化)并且相对无痛(无需担心发布)内存感谢垃圾收集)..在ADO.NET提供商的情况下,你也有连接池的好处,所以你不应该关心管理这种类型的实例数。
显然,在其他情况下(例如重型/大型物体),产生大量物体会对内存压力和性能产生影响。因此,请尽可能地评估情况。