FileStream.Dispose是否足够?

and*_*ndy 1 c# file-io dispose locking .net-4.0

我正在使用FileStream和StreamReader类,如下所示:

using(FileStream stream = File.Open(filePath,FileMode.Open,FileAccess.Read,FileShare.ReadWrite))
{
    using(var reader = new StreamReader(stream))
    {
        content = reader.ReadToEnd();
    }                    
}
Run Code Online (Sandbox Code Playgroud)

这意味着我正在处理它们.

然而,通过运行另一个应用程序,我发现有一些锁定保留我正在阅读的文件中的一些.

除了Dispose我应该调用Finalize还是Close?

干杯!

更新 - 为什么我认为有一个锁定正在进行:

我有一个写入一些日志文件的服务.

上面的代码来自不同的WCF应用程序,它读取日志.

我还有一个自动部署项目,它停止主服务,备份文件,并添加新版本的服务,并再次启动它.

如果WCF服务正在运行(包含上面的代码),即使主服务已经停止(写入日志的服务),我在运行部署应用程序时也会遇到IO异常.

当WCF服务没有运行时,我没有IO异常,我可以安全地移动文件.

WCF所做的唯一IO就是......所以我假设它在某处保持某种锁定......?

kry*_*our 8

不需要在流上调用close主要是因为读取器上的dispose方法无论如何都要明确地执行

快速浏览反射器中的代码就可以看出这一点

...
        if ((this.Closable && disposing) && (this.stream != null))
        {
            this.stream.Close();
        }
...
Run Code Online (Sandbox Code Playgroud)

因此,当在Reader上调用dispose(true)时,底层流被关闭,然后当使用块退出时,所有对象都准备好进行垃圾收集.

using语句足以释放资源,这就是IDisposable模式存在的原因:)