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

Pan*_*nks 1 sql

我有100多个这样的方法,每个方法被调用超过一千次.这里每次调用都会创建一个新的SqlConnection)(取自池).虽然方法很小并且控制立即离开方法,但是应该由GC收集SqlConnection.

Method()
 { 
   MyComponent adapter = new MyComponent (); 
   adapter.Connection = GetConnection(dbContext);//Here I get new SqlConnection 
   adapter.Update(_SqlTable); 
Run Code Online (Sandbox Code Playgroud)

} //方法结束

我的问题是 - 以下优化是否有任何区别?

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
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 5

是的,你应该绝对关闭连接而不是让它最终完成.您是否正在尝试编写自己的连接池?如果是这样,请不要 - 框架自动提供它.只需创建一个新的SqlConnection,它将从池中获取底层连接.

你应该使用一个using语句来确保无论发生什么情况都要处理连接:

using (SqlConnection connection = GetConnection(dbContext))
{
    MyComponent adapter = new MyComponent(connection);
    adapter.Update(_SqlTable);
}
Run Code Online (Sandbox Code Playgroud)

您应该记录这MyComponent确实不是采取在这种情况下连接的生存责任.另一种方法是创建MyComponent实现IDisposable,在构造函数中传递数据上下文,并处理:

using (MyComponent adapter = new MyComponent(dbContext))
{
    adapter.Update(_SqlTable);
}
Run Code Online (Sandbox Code Playgroud)

在不知道什么的情况下,很难提供更多的设计建议MyComponent.