質問

機能とクラスの速度を測定する最良の方法は何ですか?すべての機能にはさまざまなソリューションがあり、実行速度を測定し、可能な限り最良のソリューションで共有クラスを最適化する方法を知りたいと思います。

また、SQL速度、たとえばストアドプロシージャ、選択、ビューなどの違いなど、どのように測定しますか?

役に立ちましたか?

解決

2つのオプションがあります。

使用する System.Diagnostics.Stopwatch 特定の方法の場合。

これは、.NETの高解像度タイマーであり、コードの特定の部分に使用できます。

アプリケーション全体のパフォーマンスを測定する必要がある場合は、プロファイラーを使用してください。

Visual StudioのUltra Editionのプロファイラー、または次のようなツールを使用することができます eqatec.

他のヒント

プロファイラーを使用するのが最善です。壁掛けの実行時間を測定する際の問題( Stopwatch クラス)は、それがあなたのコントロールからはるかに多くの要因の影響を受けているということです。このような要因に言及するために、ネットワークやその他のI/Oレイテンシ、およびアプリケーションとスレッドの相対的な優先度に影響を与えるオペレーティングシステムスケジューラの決定があります。仮想化された環境内で実行されている場合、それはまた、ミリ秒範囲のウォールクロック時間測定に比較的大きな影響を与える可能性があります。プロファイラーは完璧ではありませんが、実際にコードを実行するのにどれだけの時間に費やされているかについてのより良いアイデアが得られます。

それに加えて、優れたプロファイラーは、実行中にコードが使用するメモリの量など、他の有用なメトリックも提供することがよくあります。

測定と最適化の目標を混同しないことが最善です。それらは異なるタスクです。測定は、何かを修正する結果を定量化するのに適していますが、何を修正するかを伝えるのは貧弱です。

測定の主題については、何かがどれだけ速いかを提示したい場合は、制御された環境と良いストップウォッチが必要です。ただし、最適化を目的として、粗測定(1000回の実行など)やシンプルなタイマーを使用することで十分です。

最適化のテーマについては、私は速度に関心がありません。私は不必要な活動に関心があります。それを見つけるために高速でコードを実行する必要はありません。

プログラムが実行されると、コールツリーを追跡します。最適化は、できるだけ多くの葉(指示)とできるだけ多くの果物(I/O)を除去することで構成されています。これを行う良い方法は、枝全体を剪定することです。

  • 最小のプログラムを除くすべてのプログラムでは、最適化の典型的な機会は、コールポイント(関数自体ではなく、関数が呼ばれるコードの行)で構成されています。仕方。単一の無邪気な見た目のコードが、ツリー全体の大部分の責任を負う可能性があり、単純に切り替えることができるかもしれません。

それらを見つけるために、私は壁2時間のタイムスタックサンプリングが最良の方法だと思います。これが効率的なプロセスである必要はなく、かなり少数のサンプルが多数のサンプルと同様に機能します(またはそれ以上)機能します。最初に書かれたように、速度を1つだけ含む機会が1つだけ含まれていないため、繰り返し行う必要があります。いくつかが含まれています。これが例です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top