2011-06-18 9 views
2

この質問では、.Netアプリケーションのパフォーマンスを測定するための優れたアドバイスを集めることができれば幸いです。.Netアプリケーションのパフォーマンスを測定する方法

個人的には、私はアルゴリズムをテストしたいという状況にあり、測定値が正確であることを確かめたいと思います。そこで私は、次の操作を行います。Visual Studioの外でアプリケーションを実行する

  • リリースモードのコンパイル(最適化など)
  • コードを複数回にわたりループ
  • (などの不要なチェックを回避)と(最低時間がかかります適切なクロックを使用して
  • (* 1) )それは前にJITコンパイルされ、定期的なGC、OS固有のものなどを避けてください(* 2)
ます10

(* 1)入力が常に同じではない場合は、実行時間の平均を実行すると意味があります。また、Accurately measure elapsed wall clock time in .NET

を参照してくださいので、質問は本当にです:

はI(または他の人が)上記のリストに見逃しているものはありますか?そして、(リストや新しいものの中で)提言がなぜうまくいくのかを詳しく説明します。

更新:ベンチマークの前にngenを使用している人はいますか?はいの場合、なぜですか?

おかげで、ラッセEspeholt

+0

あなたの目標は測定しているので、正しい軌道に乗っていると思います。その目的のために、私はrun-it-N-times-and-divide-by-Nメソッドを使用します。あなたが最適化するためのポイントを見つけるという目的を持っていたなら(時間の節約)、私は[stack-sampling](http://stackoverflow.com/questions/6328673/which-is-themost-reliable-profiling-tool- gprof-or-kachegrind/6367165#6367165)。 –

答えて

1

を助けるかもしれませんDIYソリューション)、多数の入力に押し込み、100万回繰り返し実行して平均をとる。複数のアルゴリズムをテストする必要がある場合は、小さなテスト・アプリケーションを小さなテスト・ハーネスに拡張し、すべてのテスト・アルゴリズムの結果を得ることができます。 Continuous Integrationを使用している場合、このテストハーネスはこれらのアルゴリズムのパフォーマンスに関する頻繁なフィードバックを提供します。

または、Visual Studioチームエディションに付属のプロファイリングツールを使用します。

#2のコメントに関して、System.Diagnostics.Stopwatchクラスは、Windowsなどの汎用OSとほぼ同じレベルです。

関連する問題