2013-06-25 44 views
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()

爲什麼以及如何克服呢?

+3

我可能是錯的,但是Flush(true)是把它刷到磁盤上。 Flush()只會將其刷新到內部緩衝區。 –

+0

http://msdn.microsoft.com/en-us/library/system.io.filestream.flush.aspx可能發生的情況是Flish()本身不會清除中間緩衝區。因此,他們在Close()處堆積可能正在被GC清除的信息,這最後一部分是我的一個推測:) – CarlosB

回答

相關問題