エクササイズ 1.3: パフォーマンス・ボトルネックの識別
エクササイズ 1.3 を始める前に、『エクサ
サイズ 1.2 パフォーマンス・データとカバレッジ・データの収集』を完了してください。
パフォーマンス・ボトルネックは、コード内で処理がスローダウンまた
は停止している領域のことです。ここでは、
「パフォーマンス・コール・グラフ」ビューを
使用して、ソート・プログラム内のボトルネックを識別する手順で行います。
ボトルネックを検出するには、以下を実行します:
- プロファイル・モニターで「プロファイル・リソース」を右クリックし、
次に「アプリケーションから開く」>「パフォーマンス・コール・
グラフ」を選択する。
「パフォーマンス・コール・グラフ」ビューには、
デフォルトで次の情報が表示されます:
- ◎プロファイル作成の実行中、最も時間のかかる 20 のノード。
および、実行全体における全累積時間を表示する「プロセス」ノード。この場合、
状況表示行の可視統計によると、ノードは合計で 17 個のみであり
、17 個すべてが表示されています。 「ノード」 は、
メソッド、プロセス、またはスレッドのいずれかを表します。
- ノードをリンクする線 (弧) を結んで示される、
プロファイル作成の実行中におけるプログラムの動的呼び出し構造。
太い線は、時間の掛かる呼び出しパスを示します。
ヒント: ノードを右クリックするとメニューが表示され、
そのメニューから、ノードとその子孫 (サブツリー) に焦点を
当てて表示したり、他の方法で表示を操作したりすることができます。
これらのメニュー・コマンドを使用することで、小さいアプリケーション
でも大量に収集されるデータを単純化することができます。
- グラフの上部に位置する「強調表示」フィールドで
、「ルートの最大パス」が選択されているこ
とに注目する。
「ルートの最大パス」が強調表示されて
いることにより、アプリケーションの現在の実行で最も時間の掛かる呼び出
しパス (1 つ) が示されます。
特に、コール・グラフの表示は次のように変更されます。
- プログラム内で最も時間の掛かったノードが選択される。この例では、
このノードはクラス Sort 内のメソッド quick です。
- 選択されているノードから Process ノードまでの呼び出し
パス (実行全体の合計時間を表す) が強調表示される。
- コール・グラフには、バブル・ソート・アルゴリズムを
表す bsort メソッドもあることに注目する。線の太さから
判断して、この実行処理では qsort よりも bsort のほうが
パフォーマンスが高いことが分かります。
追加パフォーマンス情報の取得
プラットフォームにおける「パフォーマンス・コール・グラフ」ビューと
その他のビューの両方から、アプリケーションのパフォーマンスに関する追加の詳細情報を入手することができます。
追加のパフォーマンス・データを取得する場合は、次の手順に従ってください。
- Sort.quick がどのように実行されているかを把握するには、
カーソルを Sort.quick ノードの上に置く。
ツールチップがメソッドの統計と共に表示されます。このメソッドは
多くの呼び出しを行うことに注意してください。
- メソッドに関するデータを詳細なグラフィックで表示するには、
ノードをダブルクリックする。「メソッド詳細」ビューが開きます。
- 「メソッド詳細」ビューで、
「呼び出し元」ペインを参照する。
メソッドが Sort.Qsort で呼び出されるのは 1 回だけですが、
メソッドは自らを何千回も呼び出します。
これ自体には特に問題はありません。通常、クイック・ソートは
大量の再帰処理を行います。
ただし、呼び出しに掛かる時間が比較的長い場合には、
問題が生じている可能性があります。
- すべてのメソッドのソート可能リストを調べるには、
プロファイル・リソースを右クリックし、「アプリケー
ションから開く」>「メソッド統計」と選択する。
列ヘッダー「基本時間」をクリックし、現在の実行で
それぞれのメソッドにかかった時間を基準にメソッドをソートします。
quick の方がバブル・ソート・メソッ
ド bsort よりも大幅に時間がかかることが分かります。
これで、quick メソッドは予想以上に
時間がかかることが確認されました。
また、「パフォーマンス・コール・グラフ」ビューと
「メソッド詳細」ビューからパフォーマンス情報を取得する方法も分かりました。
この情報は、コードを検査して変更を加える必要がある場所を特定する場合に重要です。
ただし、コードを検査する前に、そのコード内に実行され
なかったメソッドがあるかどうかを把握しておくことも必要です。
この検査から、アプリケーションのスコープがよく分かり、またこの
プログラムに含まれている可能性がある代替パスがあるかどうかも分かります。
『エクササイズ 1.4: コード・カバレッジの検査』に進み、
実行されていないメソッドや代替パスがあるかどうかを判断してください。