C# 使用语句和关闭方法
当与数据库连接对象一起使用时,using语句真的调用close方法吗?表示它确保调用Dispose方法,但没有提到close。我看到Stack Overflow上的帖子,人们说它同时具有这两种功能。是否有人从微软或其他可靠的证据那里得到了具体的答案?调用C# 使用语句和关闭方法,c#,.net,C#,.net,当与数据库连接对象一起使用时,using语句真的调用close方法吗?表示它确保调用Dispose方法,但没有提到close。我看到Stack Overflow上的帖子,人们说它同时具有这两种功能。是否有人从微软或其他可靠的证据那里得到了具体的答案?调用Close方法将调用Dispose。叫哪一个并不重要 一个具体的例子是该方法: Close的这个实现调用Dispose方法,并传递一个真值 以下是SqlConnection类的“Dispose”方法: protected override voi
Close
方法将调用Dispose
。叫哪一个并不重要
一个具体的例子是该方法:
Close的这个实现调用Dispose方法,并传递一个真值
以下是SqlConnection类的“Dispose”方法:
protected override void Dispose(bool disposing)
{
if (disposing)
{
this._userConnectionOptions = null;
this._poolGroup = null;
this.Close();
}
this.DisposeMe(disposing);
base.Dispose(disposing);
}
如您所见,它确实调用Close()如果实现IDisposable接口,则任何类都可以具有Dispose方法 MSDN说:“此接口的主要用途是释放非托管资源。” 由实现者来决定这到底意味着什么
在DBConnection的情况下,disposing还意味着关闭连接…关闭和Dispose执行相同的操作。他们添加Close只是为了可读性,因为说您“关闭了连接”更自然。如果您使用
using
语句,连接将被关闭,那么实现IDisposable的对象在垃圾收集后仍将保持打开是毫无意义的
但是Close()
和Dispose()
不是一回事:
始终隐式调用Dispose()
Close()
清除连接字符串,Dispose()
不清除连接字符串Close()
- 如果要重新打开连接,应
而不是Close()
Dispose()
如果您选择使用
Dispose()
不要直接调用它,那么using
语句是最好的方法。请记住,Close()所做的只是将连接释放回连接池。您仍然会注意到SQL Server中与数据库的活动连接。
如果您还需要确保这是关闭的,您可能需要考虑或
从
连接池减少了需要打开新连接的次数。池程序维护物理连接的所有权。它通过为每个给定的连接配置保留一组活动连接来管理连接。每当用户在连接上调用Open时,池处理程序都会查看池中是否有可用的连接。如果池连接可用,它会将其返回给调用方,而不是打开新连接当应用程序在连接上调用Close时,池处理程序将其返回到活动连接的池集,而不是实际关闭它。一旦连接返回到池中,它就可以在下一次打开的调用中重新使用。因此假设实现IDisposable的人将在Dispose方法的内部调用close,对吗?这似乎有点主观…+1很好地知道,连接是否在某个非活动超时后返回池?这是针对SqlConnection对象的,其他连接对象呢?我是说连接之类的?我们如何确保在Dispose方法中调用Close()?我知道大多数情况与上述情况相同,但我认为1%仍然存在。。