dotMemory 2018.3ヘルプ

ドミネーターによるグループ

The ドミネーターによるグループ view allows you to understand how memory is retained in your app. For example, you know that the major part of memory in your app is consumed by strings. Nevertheless, most likely, the subject of your optimizations are not these strings by themselves but data structures that store them. The ドミネーターによるグループ view answers the "Who retains the memory" question which is extremely important when analyzing ineffective memory usage. To answer this question properly, you should be acquainted with the concept of dominators.

支配者とは何ですか?

The object A dominates the object B if every path to B from application's roots goes through A. In other words, the object B is retained in memory exclusively by the object A: If A is garbage collected, B is also garbage collected. For example, an array is a dominator for its elements (in case there are no other references to array elements).

retained by 1
If there are more than one path to an object from app's roots, it is considered as not dominated or not exclusively retained object. For example, if the object C is retained by the objects A and B and A is garbage collected, C will stay in memory (as it is still referenced by B). That's why it is important to understand the difference between the domination path (any object on the path is retained only by one other object) and the retention path (an object on the path may be retained by any number of other objects).

ドミネーターによるグループビューは2つの部分で構成されています。

Dominatorsの木

The tree on the right shows the tree of dominators for the selected object set.

ツリーは、ツリーヘッダーの対応するボタンで選択できる2つのモードで動作します。

  • ツリー : All dominator nodes are shown. The dominators that take part in a domination path for the selected tree node are shown in bold.

  • パス : 選択されたツリーノードの支配パスに参加する支配者のみが表示されます。

ドミネーターのリストは、以下の列で構成されています。

名前

説明

タイプ名。<br>型名の左にある数字は、その型のオブジェクトの数がそのように保持されていることを示します。例:整数Aの配列の要素はまったく同じ方法(A - >要素)で保持されますが、整数配列Bの要素は別の保持パス(B - >要素)を持ちます。

保持されたバイト数

排他的に保持されるオブジェクトの全体サイズ(バイト単位)。

保持されたオブジェクト

ドミネーターが支配するオブジェクトの数。

サンバーストチャート

左のサンバーストチャートは、ドミネーターツリーの図です。支配者が保持するメモリが多いほど、中心角が大きくなります。

ドミネーターツリーの分析は、ノードを拡張して保持されたバイト数列の数値を解釈する必要があるため、かなり複雑になる可能性があります。これとは対照的に、サンバーストチャートを一目で確認することで、アプリのメインドミネーターと最大の構造を特定することができます。興味のあるドミネーターをクリックすると、ツリー内の支配的なパスが表示されます。

サンバーストチャートが支配ツリーからのデータをどのように表示するかをよりよく理解するために、以下の例を検討してください。

ズームイン/ズームアウト

特定の支配者のサブツリーをより詳細に見たい場合は、グラフの縮尺を変更することができます。

ドミネーターを拡大するには

  • 以下のいずれか 1 つを実行します:
    • チャート内の対応する円弧をダブルクリックするか、コンテキストメニューからズームインを選択します。

    • ツリーのドミネーターをダブルクリックするか、ツリーを選択してEnterを押します。

    支配者はチャートのルートになります。

ズームアウトするには

  • グラフの中心をクリックします。

サンプル

retained by 3

オブジェクトのフィルタリング

分析に関心のないオブジェクトを除外することができます。

リストを絞り込む

  • フィルターフィールドに目的のタイプ名を入力し始めます。

    dotMemoryは、パターンと一致しないすべてのインスタンスを除外します。

次のヒントを参考にすれば、より効率的な検索を行うことができます。

  • キャメルハンプを使用してください。例: fo は、System.Drawing.Font 型と MS.Utility.FrugalObjectList 型のオブジェクトを返します。

  • Use special symbols, like wildcards and others. The full list is shown in the table below.

シンボル

説明

サンプル

*

ワイルドカード

*
セット内のすべてのオブジェクト

sys.*.data
パターンと一致するすべての型と名前空間。例: System.DataSystem.Windows.Controls.Datagrid、および System.Windows.Data.Binding

sys.*.data.
Only namespaces that match the pattern. E.g. System.Windows.Data.Binding but not System.Windows.Controls.Datagrid .

配列

[]

配列のみを残す

str[]
それらの型または名前空間に str を含む配列。例: String[]

[,
[,,
...
または
[,]
[,,]
...

指定されたまたはそれ以上の配列(角括弧が閉じていない場合)

str[,,
型または名前空間に str を含む次元3以上の配列。例: String[,,] および String[,,,]

str[,,]
型または名前空間に str を含む3次元配列。例: String[,,]

!a

結果から配列を除外する

!a str
Objects (excluding arrays) containing str in their type or namespace. E.g. String but not String[] .

汎用型引数

<

ジェネリック型引数を持つ型だけを残す

str<
Only objects containing str in their type or namespace and having generic type arguments. E.g. FileStreamStorage<Char> but not List<String> .

<str
Only objects containing str in their generic type arguments. E.g. List<String> but not FileStreamStorage<Char> .

<,
<,,
...
または
<,>
<,,>
...

指定された数のジェネリック型引数を持つオブジェクトのみを残す

fun<,,>
型または名前空間に fun を含み、3つのジェネリック型引数を持つオブジェクト。例: Func<String, Object, Object>

fun<str,,task
型または名前空間に fun を含み、パターンに一致する3つの引数または汎用引数を持つオブジェクト。例: Func<Stream, IAsyncResult, TaskResult, EventArgs>

!g

検索範囲からジェネリック型引数を除外する

!g str
Objects (that do not have generic type arguments) containing str in their type or namespace. E.g. String but not List<String> .

さらなる分析のためのオブジェクトの選択

ドミネーターによるグループビューでは、さらに分析するために次の項目を選択できます。

特定のドミネーターが保持するオブジェクトを開くには

  • 以下のいずれか 1 つを実行します:
    • Alt を押したまま、ツリーまたはチャートのドミネーターをクリックします。

    • ドミネーターを右クリックし、コンテキストメニューでこの支配的パスを介して保持されているオープンオブジェクトを選択します。

    その後、[type_name]で保持されるオブジェクト件名が分析パスに追加され、目的のオブジェクトのリストが型別にグループ化ビューに表示されます。

ドミネーターオブジェクトセットを開くには

  • 以下のいずれか 1 つを実行します:
    • Shift を押したまま、ツリーまたはチャートのドミネーターをクリックします。

    • ドミネーターを右クリックし、コンテキストメニューでこのオブジェクトセットを開くを選択します。

    その後、[type_name]の支配者件名が分析パスに追加され、目的のオブジェクトのリストが型別にグループ化ビューに表示されます。

分析されたオブジェクトセットによって排他的に保持されるオブジェクトを選択するには

  • open retained objects button このセットによって保持されている開いているオブジェクトボタンをクリックします。

    その後、排他的に保持されるオブジェクト件名が分析パスに追加され、目的のオブジェクトのリストが型別にグループ化ビューに表示されます。

最終更新日: 2019年3月15日

関連事項