現在の私のプロジェクトでは、文字列を解析し、その部分をコンソールに書き込む必要があります。あまりオーバーヘッドをかけずにこれを行う方法をテストする中で、私がテストしている方法のほうが実際にはConsole.WriteLineよりも高速であることがわかりました。コンソールのcharへの書き込み、最も速い方法
ベンチマークの適切な方法ではありませんが、私は通常これよりも速く、これは数回実行した後ではわかりやすい、大まかではありません。
static void Main(string[] args)
{
var timer = new Stopwatch();
timer.Restart();
Test1("just a little test string.");
timer.Stop();
Console.WriteLine(timer.Elapsed);
timer.Restart();
Test2("just a little test string.");
timer.Stop();
Console.WriteLine(timer.Elapsed);
timer.Restart();
Test3("just a little test string.");
timer.Stop();
Console.WriteLine(timer.Elapsed);
}
static void Test1(string str)
{
Console.WriteLine(str);
}
static void Test2(string str)
{
foreach (var c in str)
Console.Write(c);
Console.Write('\n');
}
static void Test3(string str)
{
using (var stream = new StreamWriter(Console.OpenStandardOutput()))
{
foreach (var c in str)
stream.Write(c);
stream.Write('\n');
}
}
ご覧のとおり、Test1はConsole.WriteLineを使用しています。私の最初の考えは、すべてのcharに対してWriteを呼び出すことでした.Test2を参照してください。しかし、これは約2倍の時間を要しました。私の推測では、すべての書き込みが完了するとフラッシュされるため、遅くなります。そこで私はStreamWriter(AutoFlush off)を使ってTest3を試しましたが、結果として約25%であるがTest1よりも速くであり、私は本当に興味があります。それとも、コンソールへの書き込みが適切にベンチマークされないのでしょうか? (さらに多くのテストケースを追加すると、いくつかの奇妙なデータに気が付いた...)
誰かが私を啓発できますか?
また、これを行うためのより良い方法がある場合(文字列を使用し、その一部をコンソールに書き込むだけです)、自由にコメントしてください。
ラン 'Test1'最後と顕著な違いがあるのかどうかを確認:ここでは
は、上記の数値を得るために書き換えテストです。私は、ある種のキャッシュがあると推測しています。 – keyboardP
正確なベンチマークを得るには、それぞれ数千回ループする必要があると思いますか? – James
あなたは時期尚早に最適化していますか? – BAF