【发布时间】: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