在退出方法之前显式关闭SqlConnection是否有用

时间:2010-11-03 07:41:15

标签: sql

我有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

有没有更好的方法来编写这些方法(例如,使它们成为静态静态方法)

1 个答案:

答案 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做什么的情况下,很难提供更多的设计建议。