我有100多个这样的方法,每个方法被调用超过一千次。 这里每次调用都会创建一个新的SqlConnection)(取自池)。虽然方法很小并且控制立即离开方法,但是应该由GC收集SqlConnection。
Method()
{
MyComponent adapter = new MyComponent ();
adapter.Connection = GetConnection(dbContext);//Here I get new SqlConnection
adapter.Update(_SqlTable);
} //方法结束
我的问题是 - 以下优化会有什么不同吗?
Method(){
MyComponent adapter = new MyComponent ();
adapter.Connection = GetConnection(dbContext);//Here I get new SqlConnection
adapter.Update(_SqlTable);
adapter.Connection.Close() // Or Dispose()
} //End of Method
有没有更好的方法来编写这些方法(例如,使它们成为静态静态方法)
答案 0 :(得分:5)
是的,你应该绝对关闭连接,而不是让它最终完成。您是否正在尝试编写自己的连接池?如果是这样,请不要 - 框架自动提供它。只需创建一个新的SqlConnection
,它将从池中获取底层连接。
您应该使用using
语句来确保无论发生什么情况都要处理连接:
using (SqlConnection connection = GetConnection(dbContext))
{
MyComponent adapter = new MyComponent(connection);
adapter.Update(_SqlTable);
}
在这种情况下,您应该记录MyComponent
不对连接的生命周期负责。另一种方法是使MyComponent
实现IDisposable
,在构造函数中传递数据上下文,并处理它:
using (MyComponent adapter = new MyComponent(dbContext))
{
adapter.Update(_SqlTable);
}
在不知道MyComponent
做什么的情况下,很难提供更多的设计建议。