JetBrains Rider 2026.1 Help

メモリ割り当てを分析する

メモリの割り当て ビューを使用して、特定の時間間隔での割り振りを分析できます。この間隔で割り振られたオブジェクトや、その割り振り元の関数を確認できます。 このビューでは、プロファイリングの進捗中でも割り振りデータを表示できます。メモリスナップショットは必要ありません。

データ収集モード

dotMemory は、次の 2 つのモードのいずれかでメモリ割り当てデータを収集できます。

サンプル化

(デフォルト、Windows のみ)dotMemory は制限付きの割り振りデータを収集します。オブジェクトを割り振る各関数ごとに、おおよそのオブジェクトサイズのみを表示できます。 オブジェクト数に関する情報は表示されません。

サンプル化 モードの長所:

  • プロファイルされたアプリケーションの速度が低下することはありません。

  • プロファイラーがすでに実行中のアプリケーションに接続されている場合に使用できます。

データは ETW イベントに基づいているため詳細ではありません。割り振られたメモリサイズの合計が 100 KB を超えるたびに割り振りイベントが発生します。 例えば、スレッドがプロファイリング中に 50 KB のメモリブロックをいくつか割り振る場合があります。 このような場合、dotMemory は 100 KB の割り振りを検出するだけです。

メモリ割り当て
全部

dotMemory は詳細な割り振りデータを収集します。割り振られたオブジェクトの正確なサイズやオブジェクト数が含まれます。

全部 モードの短所:

  • プロファイルされたアプリケーションの速度が大幅に低下します。

  • プロファイラーがすでに実行中のアプリケーションに接続されている場合は使用できません。

これらのモードは、プロファイリングセッション中にいつでも切り替えることができます。 フルアロケーションデータを分析する場合は、 全部 データ収集モードを目的の時間範囲で有効にする必要があることに注意してください。 この範囲に サンプル化 データを含む間隔がある場合、 メモリの割り当て ビューではサンプリングされた割り振りデータのみが表示されます。

データ収集モード

メモリ割り当てデータを取得する方法

任意の時間間隔でのメモリ割り当てを分析するには

  1. プロファイリングセッションを開始するまたは 既存のワークスペースを開きます

  2. 取得したいデータの詳細度に応じて、 サンプル化 または 全部 のデータ収集モードを使用します。

  3. タイムライングラフで、目的の時間間隔を選択します。

  4. 割り当て済み: ... MB リンクまたは Show memory allocation ボタンをクリックして、 メモリの割り当て ビューを開きます。

    メモリ割り当てを分析する

    これにより、選択した間隔の割り当てデータを含む新しいエディタードキュメントが開きます。

  5. ドキュメント内で、データをどのように分析するかを選択します。 メソッド呼び出しツリー 、または サブシステム でグループ化できます。

セッションの開始と特定のスナップショット間のメモリ割り当てを分析するには

トラフィックを分析する
  1. プロファイリングセッションを開始するまたは 既存のワークスペースを開きます

  2. メモリ スナップショット で、必要なスナップショットを見つけて、 メモリ割り当て をクリックします。

    メモリ割り当てスナップショットを表示する
  3. データをどのように分析するかを選択します。 メソッド呼び出しツリー 、または サブシステム でグループ化できます。

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

トラフィックを分析する
  1. プロファイリングセッションを開始するまたは 既存のワークスペースを開きます

  2. メモリ スナップショット で、必要なスナップショットを見つけ、スナップショットごとに 比較に追加 をクリックして、 スナップショットの比較 領域に追加します。

  3. スナップショットの比較 で、 メモリ割り当てを表示する をクリックします。

    メモリ割り当ての 2 つのスナップショットを表示する
  4. データをどのように分析するかを選択します。 メソッド呼び出しツリー 、または サブシステム でグループ化できます。

タイプ

メモリ割り当てビュー

タイプ ビューは、オブジェクトリストバックトレースツリーの 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() メソッドによって開始されるときに、プロファイリングセッション中に行われたすべての呼び出しが含まれることは明らかです。 このような場合、分析したくないサブシステムを除外できます。

サブシステムを分析から除外するには

  1. リストからサブシステムを選択します。

  2. Del キー を押すか、サブシステムを右クリックしてコンテキストメニューで 範囲から除外する を選択します。

  3. dotMemory は、除外されたサブシステムをグレー表示し、サブシステムリストの最後に配置します。

除外されたサブシステムを戻すには

  1. サブシステムリストの最後までスクロールします。

  2. 除外するサブシステムを選択します。

  3. Del キー を押すか、サブシステムを右クリックしてコンテキストメニューで スコープに戻る を選択します。

結果のフィルタリング

分析に関係のない項目を除外できます。

リストを絞り込む

  • 検索 検索フィールドに目的の検索パターンの入力を開始します。

    dotMemory は、パターンに一致しないすべてのアイテムを除外します。

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

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

  • ワイルドカードなどの 特殊シンボルを使用してください。 完全なリストは以下の表に示されています。

シンボル

説明

サンプル

*

ワイルドカード

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

sys.*.data
パターンに一致するすべてのタイプと名前空間。 例: System.DataSystem.Windows.Controls.DatagridSystem.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[]

ランク付けされた配列

[N..
[N..]
[N..M]
[N..M, X..Y]
NMXY が整数である

指定された数の要素を持つ配列のみを残す

byte[10..100]
Byte をその型または名前空間に 10 - 100 個の要素を持つ配列。 例: Byte[98]

byte[10..100, 25..
型や名前空間に Byte を含み、第1次元が 10 ~ 100 個の要素、第2次元が 25 個を超える要素を持つ 2 次元(またはそれ以上の次元)配列。 たとえば Byte[98, 30, 1000] なくByte[98]

範囲が指定されていない場合、フィルターはテキストフィルターとして扱われます。 例: byte[1Byte[195]Byte[1, 50] と一致します。
byte[1*5]Byte[13853] と一致します。

汎用型引数

<

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

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 を含むオブジェクト。

2026 年 6 月 12 日