2017-06-19 244 views
0

我有一個使用多線程(大量線程)並需要記錄來自每個線程的數據的程序。它輸出很多非常小的數據樣本,但速度非常快。我的數據興趣是以連續的方式記錄所有樣本。緩衝區大小的影響

所以我只需要記錄幾個更新頻率高的數字。 我想將數據附加到單個文件(多個線程到一個文件)。

什麼想知道我,如果我使用的StreamWriter EA

const int BufferSize = 65536; // 64 Kilobytes 
StreamWriter sw = new StreamWriter("filename", true, Encoding.UTF8, BufferSize); 

緩衝區大小的請告訴我效果的? 在緩衝區滿或直到流寫入器刷新到磁盤之前,是否寫入數據? (或者通過使用使用結構來刷新(也可以使用語句刷新結束)。至於程序設計,我可以在每個線程中放入流寫入器方法,或者在程序啓動時創建一個寫入器(以便線程只執行附加寫入)

對我而言,快速記錄非常重要,並且所有數據都應該寫入磁盤,因爲我可能不會丟失樣本,我必須確保它能夠全程寫入並且不會排隊,因爲緩衝區尚未滿。在直到一些按鈕被打了一個連續的方式提供這些數據。(不能將它存儲在內存中)

+0

您的要求聲明您*不*要緩衝。所以當然緩衝區大小根本不重要。設置AutoFlush = true就是這樣。 –

回答

0

您可以設置AutoFlush屬性,使其刷新緩衝區的流每次調用後StreamWriter.Write()

如果您要快速連續撥打StreamWriter.Write(),您可以撥打Flush(),而不是強制將緩衝區刷新到文件。

+0

這麼多寫道會自動刷新然後,謝謝我不知道它有這樣一個選項 – user3800527