関数のパフォーマンスを測定するための良い質問を見つけました。回答では、次のようにストップウォッチを使用することをお勧めします
Stopwatch sw = new Stopwatch();
sw.Start();
//DoWork
sw.Stop();
//take sw.Elapsed
しかし、マルチ プロセッサ マシンで実行している場合、これは有効ですか? スレッドを別のプロセッサに切り替えることができますか? また、同じことが Enviroment.TickCount にもあるはずです。答えが「はい」の場合、次のようにコードを BeginThreadAffinity 内にラップする必要があります
Thread.BeginThreadAffinity();
Stopwatch sw = new Stopwatch();
sw.Start();
//DoWork
sw.Stop();
//take sw.Elapsed
Thread.EndThreadAffinity();
PS
切り替えは、プロセッサ レベルだけでなくスレッド レベルでも発生する可能性があります。たとえば、関数が別のスレッドで実行されているため、システムが別のプロセッサに切り替えることができる場合、この切り替え後にストップウォッチは有効になりますか?
私はストップウォッチをパフォーマンス測定だけに使用しているのではなく、Thread.Sleep を使用してタイマー機能をシミュレートするためにも使用しています (呼び出しの重複を防ぐため)。