4

組み込みのプロファイラーを使用して、Visual Studio で .NET アプリケーションのプロファイルを作成しようとしています。CPU のサンプルを追跡していると、奇妙なものに出会います。アプリケーションの一部には、次のものがあります (わかりやすくするために簡略化しています)。

var requestObject = new RequestObject(parameters);
var result = GetResult(requestObject,"stringvalue");

2 行目はサンプルの約 10% を使用していることがわかります。ただし、メソッド「GetResult()」は約 7% しか使用せず、残りは [clr.dll] にあるようです。clr.dll がガベージ コレクション、JIT コンパイル、コンテキスト切り替えなどを担当していることを知っています。また、「GetResult()」メソッドはかなり複雑です (複数のアセンブリにまたがり、複数のスレッドを使用する可能性があります)。メソッドが返されると取得されます。「RequestObject」も少し複雑なので、それが関係している可能性があります。

私の質問は次のとおりです。ここで何が起こっているのかを正確に追跡できますか?また、高速化するにはどうすればよいですか? 3% はあまり聞こえませんが、'GetResult()' は、テスト時に 1 回しか実行されない場合でも、プログラムの存続期間中に何度も呼び出されることに注意してください。そして、アプリケーションの応答時間を短縮できることは非常に重要です。

ご回答ありがとうございます。

4

3 に答える 3

3

プロファイラーの出力が何を意味するのかを理解しようとしているのはあなただけではありません。SOにはそのような質問がたくさんあります。私は大きな .net アプリで作業しており、さまざまなプロファイラーを試してきました。人々が教えられることではないことはわかっていますが、実際に機能するのはこの方法です。まず、初期化中にいくつかのサンプルを取得し、基本的な実行時に他のサンプルを取得できます。2 つを一緒に積み上げて、各フェーズの負荷が他のフェーズなしでどのようになるかを推測しようとする必要はありません。

また、CPU 時間だけを見ると、余分な I/O のために高速化の機会が失われます。何もない、または取るに足らないものであると想定しないでください。CPU のみの高速化の機会を見つけて修正した場合、見つけられなかった部分が全体の大きな部分になります。他に修正するものが見つからない場合、実際には他に何もないと思い込んでしまう可能性があり、実際にはそれが大きくなる可能性があります。自分でサンプルを採取すれば、時間がかかっていることを明確に把握できます。

「でも、それは正確ではありません!」と言いたいかもしれません。そうですね、修正できるものがあれば、それを修正することで 90% の時間を節約できますが、あなたの質問は不正確で、80% または 95% かかっていると言われています。倍速?実際のところ、単に問題を測定するのではなく、問題を実際に発見することが目的の場合、問題が大きければ大きいほど、必要なサンプル数は少なくなります。

于 2012-11-14T14:00:32.717 に答える
2

無料でダウンロードできるPerfViewツールの使用に興味があるかもしれません。(Web リクエストの) このシナリオでは CPU が支配的な要因ではない可能性があるため、CPU プロファイラーを使用すると不正確になりやすいという Mike の意見に同意します。PerfView は CPU 分析を実行できますが、「ウォール クロック」分析も実行できます (PerfView のウェルカム ページの「ウォール クロック / ブロックされた時間」リンクを参照してください)。このビューには CPU とブロッキングの両方が表示されますが、データの解釈にはより注意が必要です (適切なスレッドを見つけて、対象のスレッドのセグメントを含める必要があります)。これが ASP.NET アプリケーションの場合、特別なビュー (ASP.NET スレッド タイム スタック) があり、これは特に興味深いものです (ドキュメントにもあります)。

悪いニュースは、プロファイラーが何を伝えているかを理解することに代わるものはないということです。そのため、このツールが何を示しているかを学ぶために、ある程度の時間を費やす必要があります。それ以上の価値があると思います。PerfView ビデオ、およびツールに組み込まれたかなり優れたドキュメントがあり、役立つと思いますが、ある程度の時間 (たとえば 1 時間) を費やす必要があります。

良いニュースは、あなたの投資に対する見返りは自明ではないということです. 特定の問題は 1 時間以内に解決できるはずです。数時間の投資で、ほぼすべてのアプリケーション (作成していないものも含む) のさまざまな問題を解決できるようになります。このツールは非常に強力ですが、強力な機能には多くの潜在的な調査手段があり、データを悪用して混乱させる可能性があります.

于 2012-11-15T02:20:23.133 に答える