using 之后,还需要调用 FileStream 的 Close 吗?

作者:vkvi 来源:ITPOW(原创) 日期:2012-6-17

如上代码,我知道放在 using 代码段中的代码不需要使用 Dispose,但微软没有明确说还要不要 Close。我用了 Close,运行 Visual Studio 代码分析说,不应该要这句。到底要不要 Close 这句呢?

不用

因为在 MSDN 上已经明确 Stream.Close 调用 Dispose,如果还需要的话,就相当于调用两次 Dispose 了,虽然调用两次不出错,但微软的资深工程师不会这样来架构他的程序。

那为什么用了没出错呢?

因为多次调用 Close、Dispose 方法并不会引发异常。

Dipose、Close 区别

代码运行完后 Close.txt、Dispose.txt 的相关资源已经被释放,文件可以被删除,而 资源没释放.txt 由于程序还在运行,资源还没释放,所以不能删除。

对 Close 描述要比 Dispose 多一句话,就是“关闭流”,但我们想一想,Dispose 就是释放一切资源了,一切资源都释放了,这个 Stream 关不关还有什么意义呢,都不存在了。所以我认为二者没有本质区别,并且微软有句话“为适当释放非托管资源,建议您实现公共的 Dispose Close 方法,这两个方法可为对象执行必要的清理代码操作。”。注意那个“或”字。

另外注意

以上针对的是 Stream 的资源释放上来说二者是等效的,但对于其他对象的其他应用就不同了,比如 SqlConnection 的 Close 是指关闭连接,还可以用 Open 再打开,Dispose 就不行了。

相关文章