メモリ割り当てを分析する
メモリの割り当て ビューを使用して、特定の時間間隔での割り振りを分析できます。この間隔で割り振られたオブジェクトや、その割り振り元の関数を確認できます。 このビューでは、プロファイリングの進捗中でも割り振りデータを表示できます。メモリスナップショットは必要ありません。
データ収集モード
dotMemory は、次の 2 つのモードのいずれかでメモリ割り当てデータを収集できます。
- サンプル化
(デフォルト、Windows のみ)dotMemory は制限付きの割り振りデータを収集します。オブジェクトを割り振る各関数ごとに、おおよそのオブジェクトサイズのみを表示できます。 オブジェクト数に関する情報は表示されません。
サンプル化 モードの長所:
プロファイルされたアプリケーションの速度が低下することはありません。
プロファイラーがすでに実行中のアプリケーションに接続されている場合に使用できます。
データは ETW イベントに基づいているため詳細ではありません。割り振られたメモリサイズの合計が 100 KB を超えるたびに割り振りイベントが発生します。 例えば、スレッドがプロファイリング中に 50 KB のメモリブロックをいくつか割り振る場合があります。 このような場合、dotMemory は 100 KB の割り振りを検出するだけです。

- 全部
dotMemory は詳細な割り振りデータを収集します。割り振られたオブジェクトの正確なサイズやオブジェクト数が含まれます。
全部 モードの短所:
プロファイルされたアプリケーションの速度が大幅に低下します。
プロファイラーがすでに実行中のアプリケーションに接続されている場合は使用できません。
これらのモードは、プロファイリングセッション中にいつでも切り替えることができます。 フルアロケーションデータを分析する場合は、 全部 データ収集モードを目的の時間範囲で有効にする必要があることに注意してください。 この範囲に サンプル化 データを含む間隔がある場合、 メモリの割り当て ビューではサンプリングされた割り振りデータのみが表示されます。

メモリ割り当てデータを取得する方法
任意の時間間隔でのメモリ割り当てを分析するには
セッションの開始と特定のスナップショット間のメモリ割り当てを分析するには

2 つのスナップショット間のメモリ割り当てを分析するには

タイプ

タイプ ビューは、オブジェクトリストと バックトレースツリーの 2 つの部分で構成されています。
オブジェクト一覧
リストには、オブジェクトの型ごとにグループ化された、選択した時間間隔で割り当てられたオブジェクトが表示されます。 特定のタイプを選択して、どの関数がこのタイプのオブジェクトを割り当てたかを確認します。
名前 | 説明 |
|---|---|
タイプ | 型名。 |
オブジェクト | 同じ種類のオブジェクトの数。 |
バイト数 | オブジェクトの全体的な浅いサイズ(バイト単位)。 |
バックトレース
Back Traces ツリーには、現在オブジェクトリストで選択されているオブジェクトを割り振ったすべての呼び出しツリーが表示されます。 呼び出しは下から上へ表示されます。コールスタックで最後の呼び出しが最上位ノードになります。 つまり、Back Traces は逆の呼び出しツリーです。
割り当てられたメモリの量(合計 / 自分のバイト )または割り当てられたオブジェクトの数(合計 / 独自のオブジェクト )でツリーをソートできます。 並べ替えを切り替えるには、 合計 / 所有 .. 列ヘッダーをクリックします。
合計 / 所有 .. 列は、特定の呼び出しツリー(合計 )または特定の呼び出し(自分 の)に割り当てられたメモリ(オブジェクト)の量を示します。
例えば:

set_Capacity メソッドは 149.80 MB(自分 の)を割り当てました。 このメソッドは、次の 2 つの呼び出しスタックから呼び出されました。
AddWithResizeメソッドを使用: 142.69 MBおよび
EnsureCapacityメソッドを使用: 7.11 MB
呼び出しツリー のどこで特定のメソッドが呼び出されるかを表示するには、メソッドを右クリックして このメソッドの出現箇所を「CallTree」に表示する を選択します。 これにより、マージされたすべてのメソッド呼び出しを含む呼び出しツリーが表示されます。
メソッド

メソッド ビューは、メソッドリスト、 バックトレースツリー 、割り当てられた上位 5 つのオブジェクトの型のサンバーストダイアグラムの 3 つの部分で構成されています。
メソッドリスト
リストには、選択した時間間隔中に呼び出されたメソッドが表示されます。 特定のメソッドを選択すると、そのメソッドが割り振ったオブジェクト型やメソッドのバックトレースツリーを確認できます。 リスト内の各メソッドは一意であり、すべてのコールスタックからのこのメソッドの呼び出しを表します。
名前 | 説明 |
|---|---|
メソッド | メソッド名。 |
オブジェクト | メソッド呼び出しによって割り当てられたオブジェクトの数。 |
バイト数 | オブジェクトの全体的な浅いサイズ(バイト単位)。 |
バックトレース
Back Traces ツリーには、現在メソッドリストで選択されているメソッドを呼び出したすべてのコールスタックが表示されます。 呼び出しは下から上へ表示されます。コールスタックで最後の呼び出しが最上位ノードになります。 つまり、Back Traces は逆の呼び出しツリーです。
バックトレースツリーは、 タイプビューのものと似ています。
呼び出しツリー

呼び出しツリー ビューには、選択した時間間隔の呼び出しツリーが表示されます。 呼び出しがオブジェクトを割り当てた場合、オブジェクトの型は呼び出しのツリーに表示されます。
合計 / 所有 .. 列は、特定の呼び出しツリー(合計 )または特定の呼び出し(自分 の)に割り当てられたメモリ(オブジェクト)の量を示します。
割り当てられたメモリの量(合計 / 自分のバイト )または割り当てられたオブジェクトの数(合計 / 独自のオブジェクト )でツリーをソートできます。 並べ替えを切り替えるには、 合計 / 所有 .. 列ヘッダーをクリックします。
呼び出しツリーをフィルタリングするには、ウィンドウの上部にある
検索フィールドに入力を開始します。 フィルターを設定する方法の詳細
特定のメソッドのサブシステムを表示するには、メソッドを右クリックして このメソッドのサブシステムを表示する を選択します。
サブシステム

サブシステムは、特定のタイプ、名前空間、アセンブリに属するすべてのメソッドをグループ化します。 グループ化タイプを切り替えるには、表の上部にある タイプ、 名前空間、 アセンブリ ボタンを使用します。 サブシステム ビューを使用して、特定のアプリケーションコンポーネントが割り当てるメモリの量をすばやく理解します。 例: このビューは、新しく追加またはリファクタリングされたコードのメモリ割り当てを評価する場合に特に役立ちます。
各サブシステムには、呼び出しサブツリー全体(合計 サイズ)によって作成されたすべてのオブジェクトが含まれます。 例: コンソールアプリケーションでは、 Program.Main() はアプリの呼び出しツリーの最上位ノードであるため、タイプ Program のサブシステムにはアプリケーションによって作成されたすべてのオブジェクトが含まれます。
サブシステム はマスター / 詳細ビューです。 左側と右側の表でサブシステムを選択すると、次のように表示されます。
選択したサブシステムのインスタンスによって割り当てられた上位 5 つのタイプ。
ほとんどのメモリを割り当てた、選択したサブシステムの上位 5 つのメソッド。
選択したサブシステムのマージされた呼び出しツリー。
呼び出しがオブジェクトを割り当てた場合、オブジェクトの型は呼び出しのツリーに表示されます。
合計 / 所有 .. 列は、特定の呼び出しツリー(合計 )または特定の呼び出し(自分 の)に割り当てられたメモリ(オブジェクト)の量を示します。
割り当てられたメモリの量(合計 / 自分のバイト )または割り当てられたオブジェクトの数(合計 / 独自のオブジェクト )でツリーをソートできます。 並べ替えを切り替えるには、 合計 / 所有 .. 列ヘッダーをクリックします。
アプリケーション呼び出しツリーで特定のメソッドの場所を表示するには、メソッドを右クリックして このメソッドを「呼び出しツリー」に表示する を選択します。
サブシステムをスコープから除外する
アプリケーションには、さらに分析する必要のない多くのサブシステムが含まれています。 例: System.Windows.Application タイプのサブシステムには、アプリケーションが Application.Run() メソッドによって開始されるときに、プロファイリングセッション中に行われたすべての呼び出しが含まれることは明らかです。 このような場合、分析したくないサブシステムを除外できます。
サブシステムを分析から除外するには
リストからサブシステムを選択します。
Del キー を押すか、サブシステムを右クリックしてコンテキストメニューで 範囲から除外する を選択します。
dotMemory は、除外されたサブシステムをグレー表示し、サブシステムリストの最後に配置します。
除外されたサブシステムを戻すには
サブシステムリストの最後までスクロールします。
除外するサブシステムを選択します。
Del キー を押すか、サブシステムを右クリックしてコンテキストメニューで スコープに戻る を選択します。
結果のフィルタリング
分析に関係のない項目を除外できます。
リストを絞り込む
検索フィールドに目的の検索パターンの入力を開始します。dotMemory は、パターンに一致しないすべてのアイテムを除外します。
次のヒントを参考にすれば、より効率的な検索を行うことができます。
キャメルハンプを使用してください。 例:
foは、System.Drawing.Font型とMS.Utility.FrugalObjectList型のオブジェクトを返します。ワイルドカードなどの 特殊シンボルを使用してください。 完全なリストは以下の表に示されています。
シンボル | 説明 | サンプル |
|---|---|---|
| ワイルドカード |
|
| ||
| ||
配列 | ||
| 配列のみを残す |
|
| 指定されたまたはそれ以上の配列(角括弧が閉じていない場合) |
|
| ||
| 結果から配列を除外する |
|
ランク付けされた配列 | ||
| 指定された数の要素を持つ配列のみを残す |
|
| ||
範囲が指定されていない場合、フィルターはテキストフィルターとして扱われます。 例: | ||
汎用型引数 | ||
| ジェネリクス型引数を持つ型だけを残す |
|
| ||
| 指定された数のジェネリクス型引数を持つオブジェクトのみを残す |
|
| ||
| 検索範囲からジェネリクス型引数を除外する |
|
| タイプ、値タイプ、メソッド、名前空間で検索します。 |
|


