3

関数とクラスの速度を測定する最良の方法は何ですか? 関数ごとにさまざまな解決策があり、実行速度を測定し、可能な限り最良の解決策で共有クラスを最適化する方法を知りたいです。

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

4

3 に答える 3

4

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

System.Diagnostics.Stopwatch特定のメソッドに使用します。

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

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

Visual Studio の Ultra エディションの組み込みプロファイラー、またはEQATECなどのツールを使用できます。

于 2011-02-03T09:15:41.613 に答える
1

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

それに加えて、優れたプロファイラーは、多くの場合、コードが実行中に使用するメモリの量など、他の有用な指標も提供します。

于 2011-02-03T09:53:00.777 に答える
0

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

測定に関して言えば、何かがどれだけ速いかをプレゼンテーションしたい場合は、制御された環境と優れたストップウォッチが必要です。ただし、最適化のためには、大雑把な測定 (何かを 1000 回実行するなど) と単純なタイマーの使用で十分です。

最適化に関しては、速度には関心がありません。私は不必要な活動に関心があります。コードを高速で実行する必要はありません。

プログラムが実行されると、コール ツリーがトレースされます。最適化は、可能な限り多くのリーフ (命令) と多くのフルーツ (I/O) を削除することで構成されます。これを行う良い方法は、枝全体を剪定することです。

  • 最小のプログラムを除くすべてのプログラムでは、最適化の典型的な機会はコール ポイント (関数自体ではなく、関数が呼び出されるコード行) で構成されます。仕方。無害に見える 1 行のコードが、ツリー全体の大部分を占めている可能性があり、簡単に切り取ることができる場合があります。

それらを見つけるには、ウォールクロックタイムスタックサンプリングが最適な方法だと思います。これが効率的なプロセスである必要はありません。かなり少数のサンプルは、多数のサンプルよりも同じように (またはより良く) 機能します。最初に作成されたプログラムには、高速化の機会が 1 つだけ含まれているわけではないため、繰り返し実行する必要があります。いくつか含まれています。 これが例です。

于 2011-02-04T16:43:51.387 に答える