关闭使用块内的连接

时间:2010-11-01 12:08:24

标签: c# coding-style idisposable

在阅读大量代码时,我发现实现Connection的给定IDisposable对象是在using语句中手动关闭的。当我看到与MySQL相关的代码时,我看到了这一点。

不需要明确关闭。为什么开发人员会手动关闭它?

using(cnn)
{
    //code is here
    cnn.close();
}

这是一个好的/有用的措施吗?

4 个答案:

答案 0 :(得分:5)

明确关闭using块是重复,误导和冗余所以对我来说,这是糟糕的事情。

答案 1 :(得分:0)

这取决于连接。许多人在Dispose方法中关闭自己。例如,SQLConnection在Dispose中自行关闭。

答案 2 :(得分:0)

我认为假设实现IDisposable的对象应该清理自己的资源而不需要关闭是合理的。现在它可能没有尽快关闭,所以你自己手动关闭它们,但是你不会使用using语法。

答案 3 :(得分:0)

不需要,因为IDbConnection被指定为关闭Dispose()。

(严格地说,它被指定为在Dispose()上释放资源,但这相当于调用close。如果某种数据库连接没有占用任何资源那么它就不必,但那时就不会了无论如何都是一个问题。)

然而,在关闭之前调用close会很有用,因为越早连接对象关闭越好,但是using可以捕获早期从块中逃脱(无论是异常还是,例如早期返回某些情况)。

作为一项规则,保持使用块的美观和紧密是好的,这会消除优势,但可能有例外。