3
我創建使用FileStream
一個非常大的文件(0.1 - 100 GB的):爲什麼FileStream.Close()會掛起很長時間?
using (var strm = File.OpenWrite(Destination)) {
while(someCondition) {
bfr = GetBuffer();
strm.Write(bfr.Data, 0, ChunkSizeInBytes);
strm.Flush();
ShowProgress();
}
}
當我到了using
語句的結束,線程掛起很長一段時間。我在循環後輸入strm.Close()
,看起來這是干擾點(文件關閉)。
(請注意,我Flush()
後各Write()
)
爲什麼以及如何克服呢?
我可能是錯的,但是Flush(true)是把它刷到磁盤上。 Flush()只會將其刷新到內部緩衝區。 –
http://msdn.microsoft.com/en-us/library/system.io.filestream.flush.aspx可能發生的情況是Flish()本身不會清除中間緩衝區。因此,他們在Close()處堆積可能正在被GC清除的信息,這最後一部分是我的一個推測:) – CarlosB