修正日: 07/10/23
Sampler
Performance Tools入門 その2
6. Traceタブの見方
横軸をイベント番号(経過時間)、縦軸をスタックの深さとして、サンプリング結果を視覚的にグラフで表示します。縦軸を「処理の重さ」と勘違いしがちですが、このグラフでは関数呼び出しの階層の深さであり、必ずしも処理の重さとは比例しません。このグラフの目的は「処理が重い部分」を見つけ出すことではなく、「似たような処理の繰り返し」を発見することにあります。
図6はSamplerSampleのある処理のサンプリング結果です。「start」ボタンで開始し、「stop」ボタンで停止する処理の結果をグラフ化しています。
【図6】 Traceタブのグラフ
![](images/sampler/6.png)
上記のグラフでは140以降に高さ、幅が似たような5つの山が定期的に発生しています。この部分は同じ処理を繰り返している可能性が考えられます。このような処理の内容を改善することができれば全体的なパフォーマンスの向上が期待できます。440付近に突出して高い部分があり目を引かれがちですが、必ずしも重い処理とは限りませんし、仮にそうであっても一回だけの処理なので、全体のパフォーマンスに与える影響は限定的です。
実際の処理は以下のとおりです。
- (IBAction)start:(id)sender
{
timer=[NSTimer scheduledTimerWithTimeInterval: 1
target: self
selector: @selector(subRoutin2:)
userInfo: NULL
repeats: YES ];
}
subRoutin2:をタイマーで1秒ごとに実行しています。このサンプルの場合はソースを見ればすぐにわかることですが、システム側で思いもよらぬポーリングを行っている時などは有用な機能でしょう。
グラフの中をクリックすると、クリックしたイベント番号に対応するスタックが下のリストに表示されます(図7)。その部分でいったいどのような処理をしているのかを簡単に調べることができます。
【図7】 イベントテーブル
![](images/sampler/7.png)
またグラフの中をドラッグすると一部分を拡大表示することができます(図8 --- 140から180付近を拡大表示したところ)。拡大表示とスタック内容のリストをあわせることで、特定の時間帯にどのような処理をしていたのかを詳しく調べることができます。Command+ドラッグすると元のサイズに戻ります。
【図8】 Traceタブのグラフを拡大する
![](images/sampler/8.png)