私のクラスでIOのボトルネックを見つけようとしていて、驚いたことに、ファイルに1000000メッセージを書き込むときより速くsw.Write("m"); sw.Flush()
を20000にすることができます。万が一、なぜ誰が知っていますか? StreamWriter
のコンストラクタがString
であると、async
のストリームのパラメータが設定されていません。StreamWriter:(Write + Flush)Asyncが同期よりもずっと遅い
以下のコードは、C#のインタラクティブから起動できます。はい、それは速度を測定するのに最適な場所ではないのですが、それはとにかく手元に問題が表示されます:C#インタラクティブから私の自宅のPC上で起動さ
var sr = new StreamWriter("G:\\file.file");
var N = 1000;
var sw = new Stopwatch();
sw.Start();
for (var i = 0; i < N; ++i)
{
sr.Write("m"); // or await sr.WriteAsync("m");
sr.Flush(); // or await sr.FlushAsync("m");
}
sw.Stop();
Console.WriteLine("Completed " + N
+ " iterations in " + sw.ElapsedMilliseconds + " milliseconds.");
sr.Close();
出力が1で千回の反復を完了
ですミリ秒。同期コードと
ため
43383ミリ秒1000回の反復を完了しました。
(非同期)。
更新:また、私はプログラムがFlushAsync
の内側に遅くなることに気付きました。 WriteAsync
は、同期バージョンとほぼ同じ速度で動作します。
すべてのコメントを歓迎します。
おそらく[この回答](http://stackoverflow.com/a/18335900/4372746)を参照してください。また、完全な投稿を作成するために2時間待っていたのは間違いないでしょうか? –
@Glorin Oakenfootのリンクに感謝します。私は悪いですが、私はおそらくそれを忘れるかもしれないと心配しました:-( –
なぜ誰もAsync Writeメソッドを使用するのか分かりません。Sync WriteとAsync Writeの違いはほとんどありません。 – jdweng