2012-10-19 69 views
3

我有一種方法將一個流複製到另一個流中。這是相當簡單和典型:什麼時候應該在C#中複製流時執行一次Flush()?

public static void CopyStream(Stream source, Stream destination) 
{ 
    byte[] buffer = new byte[32768]; 
    int read; 
    while ((read = source.Read(buffer, 0, buffer.Length)) > 0) 
    { 
     destination.Write(buffer, 0, read); 
    } 
} 

當目的地流是FileStream,我觀察是不是創建的文件,直到複製完成和目的地流被關閉。我相信,在複製流時,不時調用destination.Flush()將創建文件並在複製完成之前開始將內容寫入磁盤,這會在我的系統中釋放內存。

什麼時候這個destination.Flush()呼叫完成?我的算法循環中的每次迭代?每N次迭代?決不?

+1

在複製完成並關閉目標流之前創建文件是否很重要? – spender

+0

直接點'spender'。文件創建時爲什麼要小心?無論如何,您無法讀取它,直到流完成寫入。 –

+1

只是一個性能問題,:-) –

回答

1

這取決於。

  • 你想複製的強度有多強?
  • 部分數據有用嗎?

如果數據甚至一個緩衝區是有用的,那麼你可以調用在每個迭代上Flush,否則你可能把它每隔5 。但是,如果部分數據無用,那麼根本不需要撥打Flush

如果內存不足,則更頻繁地調用Flush將是件好事。

1

我不認爲沒有硬性和快速的答案。提供刷新功能,以便您可以控制何時將存儲器有效地從內存移動到流中。所以選擇是你的,爲了最小的內存使用量進行循環迭代,不要頻繁地執行,以犧牲內存爲代價實現更高的性能。

相關問題