dotTrace 2025.1 ヘルプ

呼び出しツリー

呼び出しツリーはメソッド実行パスを示します。ツリー内の各メソッドノードは、特定のスレッドによって実行されるトップレベルのメソッドを表します。メソッドノードには、呼び出されたメソッドとプロファイリング時に収集されたメトリクスがリストされます。

呼び出しツリーを使用して:

徹底的なコールスタック分析を実行するために、呼び出しツリーは次の機能を提供します。

Call Tree

1 選択された合計時間に対する呼び出し内に費やされた時間の割合。

2 短いメソッド名。

3 呼び出しとそのサブツリー内で費やされた合計時間。詳細は以下を参照してください。

4 完全なメソッド名。

呼び出し時間の計算方法

呼び出しツリーがどのように時間を計算するかを理解するために、この例を考えてみましょう。

Call Tree example

呼び出しツリーは次のように時間を計算します:

Call Tree example

最も高負荷な呼び出しを調べる

アプリケーション内の「パフォーマンスに最も負荷がかかる」メソッドをすべて実行する最も簡単な方法は、次の重要なコールアクション (Ctrl + Shift + Right) を使用することです。このアクションは、実行時間が長い次の呼び出しに移動します。現在のサブツリーにそのような呼び出しが見つからない場合、このアクションは現在選択されているノードの次の兄弟に移動します。

最もパフォーマンスの高い方法を実行するには

  1. 呼び出しツリーで方法を選択します。この方法が出発点になります。

  2. コンテキストメニューで Ctrl + Shift + Right を押すか、次の重要なコールを選択します。

  3. ステップ 2 を繰り返して、アプリケーションのすべての重要な呼び出しを確認します。

特定のメソッド呼び出しにスコープする

特定の実行パスの分析を簡素化するために、呼び出しツリースコープを特定のメソッド呼び出しに限定することができます。

特定のメソッド呼び出しをスコープするには

  1. 呼び出しツリーでメソッドを選択します。

  2. コンテキストメニューで Ctrl + Enter を押すか、これまでのスコープを選択します。

特定のメソッド呼び出しを開くと、呼び出しツリーのルートノードになります。選択されたノードのサブツリー以外の他のすべての呼び出しは非表示になります。また、選択したメソッド出現箇所によって自動的にフィルターが適用されます。このセクションの次のフィルタリングの詳細を参照してください。

Call Tree example

たとえば、上記の例で UserMethod2 呼び出し (B としてマーク) にスコープすることにした場合、呼び出しツリーは次のようになり、次のように時間を計算します。

Call Tree example

メソッドが複数の場所から呼び出された場合は、すべてのメソッド呼び出しの発生を 1 ページ内でマージできます。

すべてのメソッド呼び出しの出現箇所をマージして表示するには

  1. 呼び出しツリーでメソッドを選択します。

  2. Ctrl + Shift + Enter を押すか、コンテキストメニューからマージメソッドの出現箇所項目を選択します。

この後、選択されたメソッドは、すべての出現を含む呼び出しツリーのルートノードになります。他のすべての呼び出しは隠されています。また、メソッドの出現箇所とそのサブツリーによってフィルターが自動的に適用されます。

Call Tree example

たとえば、上記の例で、すべての UserMethod2 呼び出しをマージすることにした場合、呼び出しツリーは次のようになり、時間を次のように計算します。

Call Tree example

前の呼び出しツリールートに戻るには、上部の Back の戻るボタンをクリックします。

ビューモードのバックトレース

呼び出しツリーがメソッド出現箇所に着目すると、呼び出しツリーの上部に対応するコントロールを使用して、呼び出しツリー追跡モードに切り替えることができます。

追跡モードでは、下から上に向かって、どの関数が特定の関数を呼び出したかを確認できます。つまり、追跡呼び出しツリーの反転ビューです。

Call Tree example

たとえば、上記の例で UserMethod2 呼び出し (B としてマーク) を開くことにした場合、呼び出しツリーUserMethod2 によって呼び出されたメソッドを表示します。

Call Tree example

呼び出しツリー追跡モードに切り替えると、UserMethod2 を呼び出して終了した実行パス、つまりツリーの上部が表示されます。

Call Tree example

スレッドごとのグループ呼び出し

マルチスレッドアプリケーションの分析を簡素化するには、コールスタックをスレッドごとにグループ化します。これを行うには、コールツリーでスレッドごとにグループ化をクリックします。

Group by threads

メソッドを名前で検索

名前でメソッドを検索するには

  1. 以下のいずれか 1 つを実行します:

    • メインメニューから編集 | ファンクションの検索を選択します。

    • Ctrl+F を押します。

  2. 入力を開始します。入力すると、検索リストが絞り込まれ、入力した文字列に一致する名前が提案されます。CamelCase 表記を使用できることに注意してください。大文字と小文字は区別されないため、「gfnames」と「GFNames」に違いはありません。

    Call Tree find methods
  3. リストからクラスまたはメソッドを選択し、Enter を押します。

見つかったメソッドは、すべての出現の呼び出しサブツリーを含むルートノードになります。これは、メソッドの出現箇所とそのサブツリーによってフィルターを適用します。

コールツリーを移動する場合、特定のコールにどうやって到達したかが常に問題になります。Navigation path 現在のコールツリーのフィルタリングパスを表示するモードを有効にすると、ナビゲーションが簡単になります。このモードでは、すべての遷移が呼び出しツリーのガターに表示されるため、フォーカスされているノードがツリーのどこにあるかが常に明確になります。

Call Tree example

たとえば、上記の例で UserMethod2 呼び出し (G としてマーク) を開くことにした場合、通常は次のように表示されます。

Navigation path example

Navigation path example 現在のコールツリーのフィルタリングパスを表示するモードを有効にすると、呼び出しツリーはナビゲーションパス全体も表示します。

Navigation path example

これは、マージされたコールインスタンスでも機能します。たとえば、特定の UserMethod2 インスタンスに焦点を当てるのではなく、マージしたすべてのメソッドインスタンスを開くと、呼び出しツリーは次のようになります。

Navigation path example

ツリーのさまざまな部分が単一の ...(任意のコード)ノードでどのように表されるかに注意してください。

コールツリーがフィルターとして機能する仕組み

特定のメソッド出現箇所またはマージされたメソッドの出現箇所をスコープすると、呼び出しツリーはメソッド出現箇所によってフィルターとして機能します。

フィルターが適用された後、他のフィルターは、選択されたメソッドの発生(サブツリーを含む)が実行された時間間隔のデータのみを表示します。

フレームグラフとしてのコールツリー

フレームグラフは、呼び出しツリーのグラフィカルな表現です。各呼び出しは、関数の独自の時間 + そのすべての子関数の時間に等しい呼び出しの合計時間に依存する長さを持つ水平バーとして表示されます。コールが長いほど、バーが長くなります。グラフを開くには、呼び出しツリーフレームグラフをクリックします。これにより、現在のツリーのグラフが作成されます。

Flame graph

関連ページ:

非同期呼び出しを分析する

非同期コードの欠点の 1 つは、プロファイルを作成してパフォーマンスを分析するのが難しいことです。これは、非同期メソッドが実行されると、制御が別のスレッドに切り替えられて戻るため、結果の呼び出しツリーがもつれているためです。dotTrace は、非同期コードの分析を大幅に簡素化します。呼び出しツリー内のすべての呼び出しノードをマークし、対応する時間と継続コードをそのノードにグループ化します。つまり、異なる呼び出しスタックで検索するのではなく、非同期呼び出しのすべての「部分」を 1 か所ですばやく...

フォールドコール

呼び出しツリーは、無意味な呼び出しのグループを解析の対象にすることで簡素化できます。つまり、システム関数呼び出しと再帰呼び出しのチェーンです。システムコールを折りたたむ:システムコールは、非ユーザーコードの呼び出しです。たとえば、および名前空間からのメソッドの呼び出しです。通常、これらの呼び出しは除外され、呼び出しツリーで灰色のフォントで表示されます。フォールディングを使用して、システムコールのチェーンを非表示にします。折りたたむことができるシステムコールチェーンは、アイコンでマークされていま

予測パフォーマンス

通常、パフォーマンスプロファイリングの主な目的は、アプリまたはアプリの特定の機能を減速させる方法を決定することです。しかし、このような方法を見つけたら、この特定の方法を最適化することでアプリのパフォーマンスが向上することを確認することは理にかなっています。dotTrace を使用すると、呼び出しツリーから任意のメソッドを除外して、「アプリにそのような機能がない場合はどうなりますか? 特定のコールスタックから 1 つのメソッド出現箇所だけを除外し、すべてのコールスタックからすべてのメソッド出現箇所を...

基本: プロファイリングタイプ

dotTrace を正常に操作するには、プロファイリングタイプを十分に理解する必要があります。プロファイリングタイプは、プロファイリングセッション中に dotTrace が収集するアプリケーションデータと範囲を定義します。プロファイリングセッションを構成する場合、次のプロファイリングタイプから選択できます: サンプリング、トレース、line-by-line、タイムライン。サンプリング:簡単な概要 dotTrace は、コールスタックデータのサンプルを定期的に取得します。長所: 関数実行時間の正確な測...

ホットスポット

Hotspots は、選択したすべてのスレッドのメソッドのリストを実行時間順に表示します。他のフィルターと組み合わせてホットスポットを使用して、特定の条件で「トップ」メソッドを決定します。例: