1

Visual Studio 2010 プロファイラーを実行すると、プログラムのパフォーマンスにどのような影響がありますか? つまり、プロファイラーがパフォーマンスをチェックするためにプログラムの通常の操作に「干渉」しなければならないために、プロファイラーの結果が実際に不正確になるのはどのような場合ですか? または、そのような問題はありますか?

この質問は、Visual Studio 2010 プロファイラー (私は C# でプログラミングしています) のメソッドで、プロパティの取得/設定にかなりの時間がかかっていることがわかっていることに起因しています。これらのプロパティは、 .resxリソースディクショナリによって自動的に生成されるものです (マジック ストリングを回避します :-) ) 。役に立った。プロファイラーを実行しているときは、そのようなインライン展開は発生しないと思います...またはそうですか?

私は特に Visual Studio 2010 プロファイラーを使用していますが、他のプロファイラーを含む回答をいただければ幸いです。

これにすでに答えている質問を見逃していたら申し訳ありません-お気軽に道を示してください.

4

1 に答える 1

1

私の観点から、それは依存します...

ご存知かもしれませんが、多くのプロファイリングモードがあります。CPU /時間プロファイリングの場合、trereはサンプリングとインストルメンテーションです。

サンプルプロファイリングは、より「統計的な」プロファイリングです。結果の精度は、プロファイリングセッション中にコードが実行される回数に依存します。プロファイラーは定期的に、ターゲットプロセスで実行されている各スレッドのコールスタックのスナップショットを取得します。メソッドに膨大な数のサンプルがある場合は、多くの実行または長いメソッド実行が原因である可能性があります。非常に軽量で、システムへのパフォーマンスへの影響が最小限であり、使いやすいです。

このインストルメンテーションでは、インストルメントされる各関数の開始時と終了時にターゲットコードにプローブを挿入して、すべての関数呼び出しへの出入りを追跡できるようにします。プロファイリングセッションでは、関数が呼び出された正確な回数と実行にかかる時間を正確に測定できます。ただし、この詳細をキャプチャするにはコストがかかります。すべての関数呼び出しでかなり大きな処理オーバーヘッドが発生します(通常は少なくとも10%で、簡単に100%以上になる可能性がありますが、プロファイルされる関数のサイズに多少依存します)。コードサイズの増加とプロファイラーでの追加コードの実行も、CPUキャッシングに悪影響を与える可能性があります。

理解しておくべき最後の重要なことは、実際の条件(または実際のユースケース)でコードを測定してボトルネックがどこにあるかを正確に特定し、パフォーマンスが向上することを確認して修正する必要があるため、プロファイリングを科学的アプローチと見なすことができるということです。

于 2012-10-04T19:07:15.317 に答える