dotMemory 2018.3ヘルプ

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

ドミネーターによるグループビューを使用すると、アプリでメモリがどのように保持されているかを理解できます。例:あなたは、アプリのメモリの大部分が文字列によって消費されていることを知っています。それにもかかわらず、ほとんどの場合、最適化の対象は、これらの文字列自体ではなく、それらを格納するデータ構造です。ドミネーターによるグループビューは、「誰がメモリを保持するか」という質問に答えるもので、無効なメモリ使用量を分析する際には非常に重要です。この質問に正しく答えるには、支配者の概念を知っておく必要があります。

支配者とは何ですか?

オブジェクトA 支配するは、アプリケーションのルートからBへのすべてのパスがAを通過する場合、オブジェクトBです。つまり、オブジェクトBはオブジェクトAによって排他的にメモリに保持されます。Aがガベージコレクションされている場合、Bもガベージコレクションされます。例:配列はその要素のための支配者です(配列要素への他の参照がない場合)。

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 支配経路 (any object on the path is retained only by one other object) and the 保持経路 (an object on the path may be retained by any number of other objects).

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

Dominatorsの木

右側のツリーは、選択したオブジェクトセットの支配者のツリーを示しています。

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

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

  • パス:選択したツリーノードの支配的なパスに参加しているドミネーターのみが表示されます。

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

名前

説明

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

保持されたバイト数

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

保持されたオブジェクト

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

サンバーストチャート

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

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

Consider the example below for better understanding of how the sunburst chart displays data from the dominators tree.

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

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

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

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

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

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

ズームアウトするには

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

サンプル

retained by 3

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

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

リストを絞り込む

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

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

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

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

  • ワイルドカードなどの特別な記号を使用してください。全リストは下の表に示されています。

シンボル

説明

サンプル

*

ワイルドカード

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

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

sys.*.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>であってもよい。

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

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

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

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

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

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

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

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

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

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

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

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

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

最終更新日: 2018年12月18日

関連事項