質問

ようにしているチューニングの性能の私の願います。と思う方法を最も長い程、このように見るべきである以上の他の最適化。

ある既存の無料ツールを助けてくれるの呼び出しスタックしないようであり、各々の手法を完了ですか?私は考えものを表示する呼び出しスタックとして積層棒グラフまたは treemap なっているかどうかで見る MethodA() 10秒了いという MethodB()方法(C) この3、7秒で完了します。

いようなことがありますか?

役に立ちましたか?

解決

はい、パフォーマンスプロファイラーと呼ばれます。 RedGate ANTSとJetBrainsのdotTraceをチェックしてください。無料ではありませんが、かなり安価で、私が見たどの無料の代替品よりもずっと優れています。

他のヒント

複数のプロファイラーが利用可能です。私は1つ(Visual Studio Team Suiteに含まれているもの)だけに精通していますが、無料ではありません。私は言わなければならない、それは私が別のものに切り替えようとする望みを持っていなかったほど十分に強力/信頼性があった。私が聞いたことがあるもう1つは、Red Gateの.NETプロファイラー(無料ではありません)です。これらの両方には、あなたが望んでいるものを含むが、それに限定されない機能セットがあります。これが商用アプリケーション開発用である場合は、間違いなくチェックしてください。 :)

これを測定する方法は、プロファイラー内での計測またはサンプリングのいずれかです。

計装

Instrumentationは、次のことを行うためにすべてのコードを書き換えるのとほぼ同じです。

public void Foo()
{
   //Code
}

into

public void Foo()
{
   InformTheProfilingCodeThatFooStarted();
   //Code
   InformTheProfilingCodeThatFooEnded();
}

プロファイラーは、すべてがいつ開始および停止するかを知っているため、thisngsがいつ開始および停止し、後でこの情報を提供するかのスタックを管理できます。多くの場合、これを行レベルで行うことができます(ほとんど同じことを行いますが、各行の前にさらにインストルメントを実行します。

これにより、アプリケーションの「コールグラフ」に関する100%正確な情報が取得されますが、メソッドのインライン化を防ぎ、各メソッド呼び出しにかなりのオーバーヘッドを追加するという代償を払って取得します。

サンプリング

別のアプローチはサンプリングです。

100%正確なコールグラフを取得しようとする代わりに、実際の時間よりも正確ではないこのアプローチは、代わりに、アプリで何が起こっているかを定期的にチェックする場合に基づいて動作します実際に多くの労力を費やすことなく、さまざまな機能にどれだけの時間を費やしているかを知ることができます。ほとんどのサンプリングプロファイラーは、プログラムを中断するときにコールスタックを「解析」する方法を知っているため、どの関数を呼び出しているのか、これにどれだけ時間がかかるように見えるのか、合理的な考えを与えることができますが、これがあったかどうかはわかりません(たとえば)Bar()を10回呼び出したFoo()を10回呼び出すか、Bar()を1回呼び出したときにFoo()を1回呼び出しましたが、たまたま10回サンプリングされただけでした。 >

どちらのアプローチにも長所と短所があり、さまざまな問題を解決します。一般的に、サンプリング方法は侵襲性が低いため、最初に開始するのに最適な方法です。したがって、解決する前に最も重要な最初の質問である時間がかかることについてより正確な情報を提供する必要がありますなぜ

.netコード用の無料サンプリングプロファイラーは、VS 2008 Team Systemリリースにリンクされている無料の再配布可能なプロファイラー(ただし、個別にダウンロード可能)だけです。結果の出力は、Visual Studioの(非常に高価な)Team Systemエディション以外では簡単に表示できません。

Red Gate ANTSは(現時点では)サンプリングをサポートしていません。JetBrains(dotTrace)とMS Visual Studio Team Systemには、両方のスタイルをサポートするプロファイラーがあります。費用便益ベースでどちらを好むかは意見の問題です。

このメソッドを使用します。 すると一時停止ボタンでコストも作ります。

しょうは何%の壁時計の時刻では各ルーチンは、より正確には、各す。ることよりも大事なのは、あなたの平均期間を実行するルーチンまたは声明で、自動要因についての呼び出します。サンプリングによる壁時計時間で自動的に含まれCPU、IO、その他の種類のシステム。

さらに重要なこととして、また、サンプルをルーチンを呼び出しスタックでないものの、 なぜ.その理由とが重要であることだけは本当に求めているのは、時間を置き換えることができますか。なく、"なぜ"の情報を知っているのです。

ちなみ:このあまり知られていないこれは主に教員がいないかも知っていることはほとんどなかってい怪なソフトウェアのようにして実世界のように扱う gprof としての基盤パラダイムのプロファイリング.

この例外を使用しないことです。

P.S.期待にどの包括的な情報の追加まで以上に多く100%になっています。にすることができる、などの包括的な情報は、算ルーチンのスタックX%の時間として推定少数のサンプル)はどのくらいの壁時計の時刻で時収縮の場合は書または日常のできなどをたくさんいます。

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