关闭并处理,要调用哪一个?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (26)

比如SqlConnection,还是继承自Stream类的几个类中的一个,如果我关闭Dispose而不是Close是否重要?

提问于
用户回答回答于

根据微软的指导方针,提供Close方法在适当的地方。

考虑提供方法Close(),除了Dispose(),如果接近是该地区的标准术语。在这样做时,重要的是要使Close实现与Dispose.

在大多数情况下CloseDispose方法是等价的。主要差异介于CloseDispose如属SqlConnectionObject是:

应用程序可以调用Close不止一次。不产生任何例外。 如果你打电话来Dispose方法SqlConnection对象状态将被重置。如果尝试调用已释放的任何方法SqlConnection对象时,将收到异常。

尽管如此:

  • 如果只使用连接对象一次,请使用Dispose
  • 如果必须重用连接对象,请使用Close
用户回答回答于

不同类实现IDisposable以不同的方式,这取决于你做必要的研究。

SqlClient建议的做法如下:

using (SqlConnection conn = /* Create new instance using your favorite method */)
{
    conn.Open();
    using (SqlCommand command = /* Create new instance using your favorite method */)
    {
        // Do work
    }
    conn.Close(); // Optional
}

应该在连接上调用Dispose(或Close )! 如果调用Dispose,则不需要调用Close,并且由于使用构造使得正确处理Dispose非常容易,所以实际上没有理由调用Close。 连接会自动合并,并且在连接上调用Dispose / Close并不会在物理上关闭连接。 不要试图实现你自己的池。 从连接池中检索连接时,SqlClient会执行连接清理(如恢复数据库上下文和连接选项)。

扫码关注云+社区