Windowsでプログラムをベンチマークする最良の方法は何ですか?
-
02-07-2019 - |
質問
Windowsで.NETプログラム(C#)のパフォーマンスベンチマークを実行する必要がありますが、Windowsの世界ではあまりベンチマークを実行していません。 Windows 2000 / XPパフォーマンスモニターをカスタムカウンターで使用することを検討しましたが、これが私が望んでいるものとは思いません。
Windows XPでこれに適したシステム機能はありますか、それともSystem.Diagnostics.Stopwatch [編集]を使用して手動で解釈するためにテキストログを書き込む必要がありますか、または他に何かありますか?
編集: System.Diagnostics.Stopwatch
以外に何かありますか?
解決
マイクロベンチマークについては、MeasureItが本当に好きです( http: //msdn.microsoft.com/en-us/magazine/cc500596.aspx )。これは、CLRのパフォーマンスアーキテクトであるVance Morrisonによって書かれたテストプロジェクトです。現在、多数の.Net / CLRコアメソッドの優れたベンチマークセットがあります。最良の部分は、テストしたいものすべてに対して新しいベンチマークを微調整して追加するのは簡単なことです。 " MeasureIt / edit"を実行するだけです。 VSをプロジェクトと共に起動して、これらのベンチマークの作成方法を確認し、必要に応じて同様の方法で新しいベンチマークを追加できるようにします。
すでに述べたように、StopWatchはおそらくこれを行う最も簡単な方法であり、MeasureItはそのタイミングでStopWatchを使用しますが、コードのブロックをX回実行し、実行の統計情報を提供するなどのその他のことも行います。
他のヒント
using System.Diagnostics;
....
Stopwatch sw = new Stopwatch();
sw.Start();
// Code you want to time...
// Note: for averaged accuracy (without other OS effects),
// run timed code multiple times in a loop
// and then divide by the number of runs.
sw.Stop();
Console.WriteLine("Took " + sw.ElapsedTicks + " Ticks");
簡単な数字だけが必要な場合は、Powershellを使用して全体の実行時間を計ることができます。 measure-commandコマンドレットを使用します。これは、「時間」とほぼ同等です。 Unixで。
> measure-command { your.exe arg1 }
Days : 0
Hours : 0
Minutes : 0
Seconds : 4
Milliseconds : 996
Ticks : 49963029
TotalDays : 5.78275798611111E-05
TotalHours : 0.00138786191666667
TotalMinutes : 0.083271715
TotalSeconds : 4.9963029
TotalMilliseconds : 4996.3029
かなりの数のプロファイラがあります。私が知っているもののいくつかを次に示します。
System.Diagnostics.Stopwatchを続けて使用すると、コードの特定のポイントのみを計測および測定できます。ここでは、明示的にStart / Stopを配置します。これは、タイトループなどの特定の部分を測定するには十分ですが、プログラムがほとんどの時間を費やしている場所を完全に把握することはできません。
これはあなたが望むものではないかもしれませんが、 dotTrace は多くの有用な診断を提供し、 Visual Studio。
プロジェクトが非常に大きく、多数のモジュールが多数の呼び出しを行っている場合、次のことができます。 http://www.moduleanalyzer.com/