【问题标题】:Why FileStream.Close() hangs for a long time?为什么 FileStream.Close() 挂了很长时间?
【发布时间】:2013-06-25 10:38:43
【问题描述】:

我正在使用 FileStream (0.1 - 100 GBytes) 创建一个非常大的文件:

using (var strm = File.OpenWrite(Destination)) {
    while(someCondition) {
        bfr = GetBuffer();

        strm.Write(bfr.Data, 0, ChunkSizeInBytes);
        strm.Flush();

        ShowProgress();
    }
}

当我到达using 语句的末尾时,线程会挂起很长时间。我在循环后面放了一个strm.Close(),看来这就是卡点(文件关闭)。

(请注意我在每个Write()之后Flush()

为什么会这样以及如何克服?

【问题讨论】:

  • 我可能是错的,但Flush(true) 是将其刷新到磁盘的原因。 Flush() 只会将其刷新到内部缓冲区。
  • msdn.microsoft.com/en-us/library/… 可能发生的情况是 Flish() 单独不会清除中间缓冲区。所以他们堆积了可能在 Close() 处被 GC 清除的信息,最后一部分是我的一个假设 :)

标签: c# .net file-io filestream


【解决方案1】:

我的评论是正确的。

在此处查看 Hans Passant 的答案:https://stackoverflow.com/a/4921728/1517578

Flush(true) 将立即刷新到磁盘。 Flush() 不会。

【讨论】:

    猜你喜欢
    • 2012-01-14
    • 2011-04-22
    • 1970-01-01
    • 2022-10-05
    • 2014-04-15
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多