为什么总是closures数据库连接
连接到数据库会消耗很多资源(或不)?
那么,为什么总是在你的应用程序中closures数据库连接,如果你不得不打开它呢?
我可以在整个应用程序中使这个连接全局可用,以便其他类和方法可以重用它吗?
例如:(在伪代码中)
public class PopulateGridViews() { public SqlConnection conn = new SqlConnection(@"Database:DATABASE"); conn.Open(); void PopulateGrid1() { SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE1"); cmd.Connection = conn; cmd.ExecuteNonQuery(); cmd.Dispose(); // Populate Grid1 } void PopulateGrid2() { SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE2"); cmd.Connection = conn; cmd.ExecuteNonQuery(); cmd.Dispose(); // Populate Grid2 } }
需要你们的意见…
你不应该把连接打开..
你应该:
1)尽可能晚地打开连接
2)尽快closures连接
连接本身返回到连接池。 连接是一个有限的,相对昂贵的资源。 您build立的具有完全相同连接string的任何新连接将能够重新使用池中的连接。
我们强烈build议您在完成使用后始终closures连接,以便将连接返回到池中。 您可以使用Connection对象的Close或Dispose方法,或者打开C#中的using语句或Visual Basic中的Using语句中的所有连接来完成此操作。 未明确closures的连接可能不会被添加或返回到池中。 有关更多信息,请参见使用语句(C#参考)或如何:为Visual Basic处理系统资源。 Ref 。
顺便说一句,你应该适当地包装任何实现IDisposable
在using
语句块:
using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); ... command.ExecuteNonQuery(); }
因为(一些)数据库也持有打开连接,直到调用应用程序告诉closures它。 如果你有数百个对数据库的调用,那么它就坐在那里,有100个打开的连接占用资源。 在繁忙的应用程序中,数千或数十万的数据库调用并不罕见,数据库性能迟早会影响应用程序的性能。
这真的只是常识。 如果你有一个合理的理由保持开放,那就这样做。 如果没有,请尽快closures它。 但最好还是保持closures关系的好习惯,这样当你不打算的时候,不要把它们打开。 当你没有吃东西的时候,戴上安全带或关上冰箱门是个好习惯。
这篇文章说得很好(即使它有点过时):
http://www.bewebmaster.com/84.php
托pipe公司之间的一个常见问题是,ASP网站在打开后不会closures数据库连接。 这是您应该考虑成为强制性代码的一部分的基本步骤。 如果您不closures数据库连接,则可能会出现许多问题,如网页挂起,页面加载速度缓慢等等。
把它想成是通过你的房子的门。 也许门会自动closures,但也许不会。 如果不closures,谁知道会发生什么。 如果你住在乡下,熊可以走进去。如果你住在这个城市,一个抢劫犯可以走进去。好吧,也许打开一个数据库连接也不会导致任何不好的事情,但是会导致你和你的托pipe公司都有很多不必要的麻烦。