2017-06-19 8 views
0

マルチスレッド(たくさんのスレッド)を使用し、各スレッドからデータをログする必要があるプログラムがあります。実際に小さなデータサンプルをたくさん出力しますが、それは非常に高速です。私のデータの関心は、すべてのサンプルを連続して記録することです。BufferSizeの効果

私は、高い頻度で更新するいくつかの数字だけを記録する必要があります。 データを1つのファイルに追加したい(複数のスレッドを1つのファイルに追加する)。私はBUFFERSIZEのいただきました効果は、StreamWriter EA

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

を利用する場合、私は不思議何

? バッファがいっぱいになるか、ストリームライターがディスクにフラッシュされるまで、データは書き込まれませんか?プログラムの設計に関しては、各スレッド内にストリームライターメソッドを置くことも、プログラムの起動時に単一のライターを作成することもできます(スレッドはappend writeのみを実行するようになります) )

私には高速ロギングが重要であり、サンプルが緩んでいないのですべてをディスクに書き込む必要があります。バッファが一杯ではないので、すべての方法が書き込まれ、キューに入れられないことが保証されなければなりません。いくつかのボタンがヒットされないまで、連続的に、このデータを提供する。

+0

お客様の要件では、バッファリングしない*としています。もちろん、バッファサイズはまったく問題になりません。 AutoFlush = trueと設定してください。 –

答えて

0

は、あなたはそれがStreamWriter.Write()

にすべてのコールの後、ストリームにバッファをフラッシュするために AutoFlushプロパティを設定することができます(メモリに格納することはできません)

StreamWriter.Write()に何度か電話する場合は、代わりにFlush()に電話して、バッファをファイルにフラッシュするように強制できます。

+0

これほど多くの書き込みが継続的に行われると、私はそれがそのようなオプションを持っていることを知っていなかった – user3800527