C# 使用语句和关闭方法

C# 使用语句和关闭方法,c#,.net,C#,.net,当与数据库连接对象一起使用时,using语句真的调用close方法吗?表示它确保调用Dispose方法,但没有提到close。我看到Stack Overflow上的帖子,人们说它同时具有这两种功能。是否有人从微软或其他可靠的证据那里得到了具体的答案?调用Close方法将调用Dispose。叫哪一个并不重要 一个具体的例子是该方法: Close的这个实现调用Dispose方法,并传递一个真值 以下是SqlConnection类的“Dispose”方法: protected override voi

当与数据库连接对象一起使用时,using语句真的调用close方法吗?表示它确保调用Dispose方法,但没有提到close。我看到Stack Overflow上的帖子,人们说它同时具有这两种功能。是否有人从微软或其他可靠的证据那里得到了具体的答案?

调用
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%仍然存在。。