呼び出しツリー
呼び出しツリービューには、選択したオブジェクトセットの作成に関与するスタックトレースが表示されます。このビューを使用して、「どの関数がオブジェクトを作成したか」を問い、メモリを過剰に割り当てる関数を特定します。
分析を簡素化するために、dotMemory では、コールツリーをつららまたはサンバーストチャートとして視覚化できます。
呼び出しツリー

呼び出しツリーの各ノードは関数呼び出しを表します。関数名の横の数字は、呼び出しによって割り当てられたオブジェクトのサイズ、またはこれらのオブジェクトの数を示します。これらのモードを切り替えるには、上部のボタンを使用します。

アイコンは、関数がサンバーストチャートまたはアイシクルチャート上でどのように表示されるかを表します。アイコンの色は、チャート上の関数の色に対応します。次のアイコンがあります。
– 現在のチャートのスコープ内のルート関数。
– 関数自体は選択されたセットからオブジェクトを割り当てませんが、そのサブツリー (子関数) は割り当てます。
– 現在のスケールでは重要でない小さなサイズのオブジェクトを割り当てる関数のグループ。アイコンなし – 関数はサンバーストチャートまたはつららチャートに表示されません。
割り当てられたメモリの合計の割合、または関数とそのサブツリーによって割り当てられたオブジェクトの数。
関数の名前。
関数とそのサブツリーによって割り当てられたメモリの合計量 (またはオブジェクトの数)。
関数自体によって割り当てられたメモリの量 (またはオブジェクトの数)。
クラスを含む完全な関数名。
関数の名前空間。
関数、クラス、名前空間を名前で検索する
関数、クラス、名前空間の名前の入力を開始します。入力した文字列に一致する項目が呼び出しツリーでハイライトされます。

キャメルハンプを使用してください。例:
foは、System.Drawing.Font型とMS.Utility.FrugalObjectList型のオブジェクトを返します。ワイルドカードなどの特殊シンボルを使用してください。完全なリストは以下の表に示されています。
- 特殊シンボルとフィルターの例
シンボル
説明
サンプル
*ワイルドカード
*
セット内のすべてのオブジェクトsys.*.data
パターンに一致するすべてのタイプと名前空間。例:System.Data、System.Windows.Controls.Datagrid、System.Windows.Data.Bindingsys.*.data.
パターンに一致する名前空間のみたとえばSystem.Windows.Data.BindingなくSystem.Windows.Controls.Datagrid配列
[]配列のみを残す
str[]
それらの型または名前空間にstrを含む配列。例:String[][,
[,,
...
または
翻訳
翻訳
...指定されたまたはそれ以上の配列(角括弧が閉じていない場合)
str[,,
型または名前空間にstrを含む次元 3 以上の配列。例:String[,,]およびString[,,,]str[,,]
型または名前空間にstrを含む 3 次元配列。例:String[,,]!a結果から配列を除外する
!a str
型または名前空間にstrを含むオブジェクト(配列を除く)たとえばStringなくString[]汎用型引数
<ジェネリクス型引数を持つ型だけを残す
str<
その型または名前空間にstrを含み、総称型引数を持つオブジェクトのみ。たとえばFileStreamStorage<Char>なくList<String><str
その総称型引数にstrを含むオブジェクトのみ。たとえばList<String>なくFileStreamStorage<Char><,
<,,
...
または
翻訳
翻訳
...指定された数のジェネリクス型引数を持つオブジェクトのみを残す
fun<,,>
型または名前空間にfunを含み、3 つのジェネリクス型引数を持つオブジェクト。例:Func<String, Object, Object>fun<str,,task
型または名前空間にfunを含み、パターンに一致する 3 つの引数または汎用引数を持つオブジェクト。例:Func<Stream, IAsyncResult, TaskResult, EventArgs>!g検索範囲からジェネリクス型引数を除外する
!g str
その型または名前空間にstrを含むオブジェクト(総称型引数を持たない)。たとえばStringなくList<String>#c
#struct
#m
#nsタイプ、値タイプ、メソッド、名前空間で検索します。
#ns Feature
名前空間にFeatureを含むオブジェクト。
さらに分析するオブジェクトを選択する
さらに分析するオブジェクトを選択するには、呼び出しツリー内の関数を右クリックし、次のいずれかを選択します。
この関数のインスタンスによって割り当てられたオブジェクトを開く – 特定の関数インスタンスによって割り当てられたオブジェクトを選択します (正確な呼び出し)。または、関数呼び出しで Shift+click を使用することもできます (呼び出しツリーとチャートの両方で機能します)。
このサブツリー内のすべての関数によって割り当てられたオブジェクトを開く – 関数サブツリー (関数インスタンスとそのすべての子呼び出し) に割り当てられたオブジェクトを選択します。または、関数呼び出しで Alt+click を使用することもできます (呼び出しツリーとチャートの両方で機能します)。
関数のすべてのインスタンスによって割り当てられたオブジェクトを開く – 関数のすべてのインスタンスに割り当てられたオブジェクトを選択します (関数が異なる呼び出しスタックから呼び出される場合、これらの呼び出しは呼び出しツリーに個別に表示されます)。
その後、対応する分析対象が左パネルの分析パスに追加されます。
つららチャート

つららチャートでは、各関数呼び出しは水平バーとして表示されます。バーの長さは、呼び出しのサブツリーに割り当てられたオブジェクトのサイズによって異なります。基になるサブツリーに割り当てられたメモリが多いほど、バーは長くなります。サブツリーでは、関数呼び出し (バー) のサイズは小さくなるだけなので、サブツリーはつららのように見えます。
特定のコールサブツリーにフォーカスするには、対応するバーをダブルクリックします。チャートはサブツリーにズームインされ、選択したコールがルートになります。
サンバーストチャート

アイシクルチャートの代わりに、コールツリーをサンバーストチャートとして視覚化することもできます。サンバーストチャートは、各セグメントが関数呼び出しを表す複数のセグメントに分割された円形チャートです。セグメントの中央の山括弧が大きいほど、その呼び出し内に割り当てられるメモリが多くなります。アイシクルチャートと同様に、サンバーストチャートを使用すると、スタック内の主要なメモリジェネレーターをすばやく識別できます。機能、動作、データ表現の点では、サンバーストチャートはアイシクルチャートと完全に同じです。
サンバーストチャートに切り替えるには、ビューの上部にあるスイッチャーを使用します。
サンバーストチャートを選択すると、コールツリーを 2 つのモードで表示できます。
ツリー – 標準の呼び出しツリービュー。
パス – ルートコールから選択したコールまでのパス上にあるコールの単純なリスト。パス上にないコールはすべて非表示になります。このモードは、特定のコールパスに集中する必要がある場合に便利です。
関連ページ:
最初にユーザーインターフェースを確認する
dotMemory での作業は、ある種の犯罪捜査 (dotMemory によるメモリ分析) のようなものだと考えてください。ここでの主なアイデアは、データを収集し (1 つ以上のメモリスナップショット)、多数の容疑者 (問題を引き起こす可能性のある解析対象) を選ぶことです。まず容疑者のリストから始めて、このリストを絞り続けます。有罪判決を下すまで、1 人の容疑者が別の容疑者のところに連れて行ってくれるかもしれません。この分析コンセプト (調査範囲を大きなエンティティから小さなエンティティに絞り...
インスタンス数
インスタンス数ビューは、どのインスタンスがオブジェクトセットを構成しているかを示します。より詳細な分析のために特定のインスタンスを選択するための手段としてこのビューを使用してください。インスタンスのリストは、以下の列で構成されています。タイプ型名。アドレスインスタンスの仮想メモリアドレス。バイト数インスタンスのサイズ(バイト単位)。保持されたバイト数インスタンスによって排他的に保持されるオブジェクトの全体サイズ (バイト単位)。サンプル:オブジェクトのフィルター:分析に関係のないオブジェクト
バックトレース
コールツリーと同様に、バックトレースビューには、特定のオブジェクトセットを作成した呼び出しのリストが表示されます。ただし、コールツリーとは異なり、呼び出しは、オブジェクトセットを直接作成した呼び出しから始まり、スタックの最初の呼び出しまで降順に表示されます。つまり、バックトレースは呼び出しツリーの逆です。呼び出しのリストは以下の列で構成されています。機能関数名。バイト数呼び出しによって割り当てられたオブジェクトのサイズ。オブジェクトカウント呼び出しによって割り当てられたオブジェクトの数。名前空間...