我試圖在我的課堂上發現IO瓶頸,並且出乎意料地注意到sw.Write("m"); sw.Flush()
可以比將1000000個消息寫入文件時更快,然後await sw.WriteAsync("m"); Await sw.FlushAsync();
。有沒有人知道爲什麼?我的賭注是StreamWriter
的構造函數採取String
沒有參數化爲async
使用流。StreamWriter:(Write + Flush)Async似乎比同步變體慢得多
下面的代碼可以從C#交互式啓動。是的,這不是衡量速度的最好的地方,但它無論如何都會顯示在手頭的事情:
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();
從C#互動推出我的家用電腦上的輸出
在1已完成1000次迭代毫秒。
爲同步代碼和
完成1000次迭代在43383毫秒。
用於異步。
更新:另外我注意到,該方案減慢內FlushAsync
。 WriteAsync
的工作速度幾乎與同步版本相同。
歡迎發表評論。
可能看到[此答案](http://stackoverflow.com/a/18335900/4372746)。另外,當然你可以等待兩個小時,形成一個完整的職位? –
@Glorin Oakenfoot感謝您的鏈接。 Yeap,我的壞,但我擔心我可能會忘記它:-( –
我不知道爲什麼有人會使用異步寫入方法。同步寫入和異步寫入之間幾乎沒有區別。很快它不支付去異步。 – jdweng