C# 在Dispose方法中关闭数据库连接是否正确?
我怀疑在我们的一个应用程序中使用的数据库连接并不总是关闭的。我去看了代码,发现了一个类C# 在Dispose方法中关闭数据库连接是否正确?,c#,.net,database-connection,dispose,C#,.net,Database Connection,Dispose,我怀疑在我们的一个应用程序中使用的数据库连接并不总是关闭的。我去看了代码,发现了一个类DataProvider,它有SqlConnection对象。这个连接在这个类的构造函数中打开,在它的Dispose方法中关闭(不要判断,我知道保持一个打开的连接是邪恶的,这不是我的代码,也不是问题的重点)。Dispose方法的实现方式如下: protected virtual void Dispose(bool disposing) { if (!_disposed) { if
DataProvider
,它有SqlConnection
对象。这个连接在这个类的构造函数中打开,在它的Dispose
方法中关闭(不要判断,我知道保持一个打开的连接是邪恶的,这不是我的代码,也不是问题的重点)。Dispose
方法的实现方式如下:
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
if (_conn != null)
_conn.Close();
}
_disposed = true;
}
}
问题是:它是否始终保证连接已关闭?
这个代码对吗 我认为应该调用
\u conn.Dispose()
也将关闭连接,因此更改它以遵循dispose模式不会有什么坏处
但在功能上是等价的,所以在其他地方肯定有问题
如果SqlConnection失效
范围,它不会被关闭。所以,,
必须显式关闭
通过调用Close或
处置关闭并处理
功能等效的。如果
连接池值池不可用
如果设置为true或yes,则基础
连接返回到
连接池。另一方面,如果
如果池设置为false或no,则
与服务器的基础连接是
关闭
Dispose从不自动调用 在显式调用对象的Dispose方法之前,或者在using()块中使用类之前,连接不会关闭 更安全的方法是在终结器中调用dispose方法,并确保在调用dispose方法时抑制终结器 介绍实现该模式的正确方法 希望有帮助
Cédric如果您有怀疑,请使用性能计数器进行检查确认。要检查的键值是NumberOfPooledConnections。确定,但如果应用程序关闭(正常或由于错误),将调用dispose方法并关闭连接?当应用程序关闭时,垃圾回收器应该调用所有终结器,这样至少会关闭连接,因为连接对象的终结器将被触发。。。但这是一种断绝联系的蹩脚方式;o) 顺便说一下:Dispose方法永远不会自动调用。在您当前的代码状态下,连接被关闭,因为Connection的dispose方法是在其终结器中调用的。您的意思是无论如何都不会调用此方法吗?如果未在代码中显式调用、未由finilizer调用或最终由祖先的调用,也未在using()块末尾调用,永远不会调用此方法