如果我失去了包含与数据库的打开连接的对象的引用,当GC清理我的对象时(即通过
还是会导致连接泄漏?
SqlConnection类
的析构函数),连接是否关闭?还是会导致连接泄漏?
SqlConnection类
的析构函数),连接是否关闭?Dispose
中关闭,而不是在析构函数(Finalize
)中关闭。因此,请使用using
语句,这样就更加安全了。SqlConnection.Close
中找到了:SqlConnection
超出范围,它将不会被关闭。因此,您必须显式地通过调用Close
或Dispose
来关闭连接。Close
和Dispose
在功能上是等效的。SqlConnection
,打开它,显示一些属性。连接将在using
块结束时自动关闭。Finalize
方法中调用Close
或Dispose
,也不要在该方法中调用连接、数据读取器或其他托管对象。在终结器中,您应该只释放直接拥有的非托管资源。如果您的类不拥有任何非托管资源,则不要在类定义中包括Finalize
方法。// System.Data.SqlClient.SqlConnection
protected override void Dispose(bool disposing)
{
if (disposing)
{
this._userConnectionOptions = null;
this._poolGroup = null;
this.Close(); // <-------
}
this.DisposeMe(disposing);
base.Dispose(disposing);
}