Instruments Time Profiler で優勢な比較的長い関数があります。サンプリングが関数のさまざまな部分に割り当てられた時間を表示するように、この関数にシンボルを追加する方法はありますか? prof(1) 年前に存在した MARK マクロのようなものを探しています。
4 に答える
マクロの使用:
#define MARK(K) asm("M."#K":");
私にとってはうまくいっています。これは、元の質問で言及した古い MARK マクロを単純化したものです。MARK(LOOP1)の配置; 関数のどこかに新しいシンボル M.LOOP1 が追加され、サメや楽器によって表示される関数のリストに表示されます。
私は最近、計測器の時間プロファイラーで、メソッドをダブルクリックすると、各行に費やされた時間のパーセンテージでソース コードが表示されることを発見しました。
http://douglasheriot.com/blog/2011/04/xcode-4-instruments-awesomeness/
とても便利だと思いましたが、それがあなたの求めているものかどうかはわかりません。
Shark はこれを行うことができると言われているので、Instruments も行う必要がありますが、何をすべきかを指示する必要があります。
関数呼び出しスタック (プログラム カウンター PC だけでなく) の実時間 (CPU 時間だけでなく) でサンプリングを行います。
スタックサンプルのかなりの割合で表示されるコード行 (関数だけでなく) を教えてください。
スタック サンプルには、PC と、PC の場所につながるすべての呼び出し命令が含まれます。スタック上のすべての命令は、費やされた時間のスライスに対して共同で責任を負います。
したがって、X% の時間を担当するコード行は、X% の時間スタックに置かれます。見る価値があるほど大きい場合は、サンプルに表示されます。多くのサンプルが得られるかもしれませんが、実際にはそれほど多くは必要ありません。これは、問題を正確に測定するよりも、問題を突き止めることが重要だからです。
最大の問題が修正された場合に 5% の節約になるとすれば、それはサンプルの約 5% 以上に現れるでしょう。それよりも小さい場合、コードはかなり最適です。おそらくそれよりもはるかに大きいので、正確にどこにあるかを確認するのに問題はありません.
追加: 経過時間のスタック サンプリングを行い、行ごとの割合を表示するプロファイラーの例はZoomです。そのため、そのビデオを見ることをお勧めします。次に、Instruments に同じことをさせてみてください。
アップデート:
コードを更新し、別のプロジェクトを作成しました。
https://github.com/nielsbot/Profiler
ここでこれを行うことができるいくつかのコードがあります: ここでこれを行うことができるいくつかのコードがあります: https://gist.github.com/952456 HTH
次のようなコードを使用して、関数のセクションをプロファイリングできます。
-(void)myMethod
{
ProfilerEnter( __PRETTY_FUNCTION__ );
// ... code ...
{
ProfilerEnter("operation x");
// your code here
// ...
ProfilerExit("operation x");
}
ProfilerExit(__PRETTY_FUNCTION__);
}