我需要处理 FileStream 对象吗?

Mat*_*ics 7 c# web-services

我对我的编程知识感到非常沮丧,但我们真的需要处理 FileStream Object 吗?

我问的原因是因为代码在 100 种情况下抛出“另一个进程正在使用的文件”异常,并且有一段时间好像我再次尝试(使用文件流下载文件)它工作正常。

代码请参考这个问题

由于它只发生在 100 次左右,这让我很困惑,而且它发生在生产服务器上,所以根本无法调试,但在我的开发机器上运行良好......

usr*_*usr 5

当然,您需要处理所有可丢弃的东西,除非您有充分的理由不处理。

using默认情况下将所有内容放入一个块中。如果您Close手动调用,这是代码异味。


Guf*_*ffa 5

一般规则是处理所有一次性物品。

在 a 的特定情况下FileStream,您不需要处理它来关闭文件,您只需要使用该Close方法即可。

但是FileStream无论如何你都应该处理这个对象,因为它有一个终结器。这将从终结器队列中删除对象,并使其成为可以在单次通过中进行垃圾收集的普通对象。如果不处置它,垃圾收集器必须运行该Finalizer方法,并且直到稍后才能收集它,因此它会在内存中停留更长时间。

因为无论如何你都应该处理这个对象,所以你可以把它放在一个using块中。这将调用该Dispose方法,而该方法又将调用该Close方法,因此您无需自己执行此操作:

using (System.IO.FileStream stream = System.IO.File.Create(Path + file.Name)) {
  stream.Write(document, 0, document.Length);
}
Run Code Online (Sandbox Code Playgroud)