次の方法で共有


メモリ使用量ツールでルートへのホット パスを分析する

Visual Studio の Memory Usage プロファイリング ツールで .NET コードをプロファイリングする場合、ルート への ホット パスは、メモリ使用量の問題を引き起こしているヒープ上に保持されているオブジェクトを識別するのに役立つ場合があります。 メモリ使用量のコンテキストでは、ホット パス は、メモリの問題の原因となる可能性があるルート オブジェクトを指すプロファイラーによって識別される参照チェーンです。

オブジェクトの包括サイズ (オブジェクトを維持することでヒープに保持されるメモリの総量) を計算する場合、強く接続されたヒープ グラフをツリーに減らすと役立つことがよくあります。 グラフとは異なり、ツリー内のノードには任意に多くの子がありますが、親は 1 つだけです。 オブジェクトに対して考えられるすべてのルート パスを考慮するのではなく、通常、さまざまなヒューリスティックを使用してルートへの最も可能性の高いパスを選択するだけで、削除された場合にオブジェクトがガベージ コレクションの対象となる参照チェーンを見つけるのに十分です。 これらのヒューリスティックには、ルートへの最短パス、特定のルート型、およびユーザー コード パスの優先順位付けが含まれます。 さまざまな理由から、この戦略は常に最も興味深い保持チェーンや最長のリテンション期間チェーンを見つけるわけではありませんが、多くの場合、メモリ使用量の調査の開始点として役立ちます。

メモリ使用量ツールの [ルートのパス] ツリーで、炎アイコン (ホット パス アイコンを示すスクリーンショット。) が付いたパスは、ルートへのホット パスと呼ばれます。

[ホット パスのみを表示] オプションを使って、[ルートのパス] ペインの表示をフィルター処理します。

この例では、最終的に AutomationPeerによってルート化されたバインディングによって、WPF コントロール (AttachToProcess.Dialog) がリークされています。 フィルター処理されたビューでは、保持パスは明らかです。ルートへの直接パスのみが表示されます。

ルートへのパス参照グラフのスクリーンショット。[ホット パスのみを表示] がオンになっていると、参照の線形チェーンが強調表示されます。

このオプションを無効にすると、何百ものバインドが存在することが明らかになり、ほとんどの拡張パスは、そのサイクルの行き切れにつながります。 ビジュアル インジケーターがないと、何千もの潜在的な保持パスを並べ替えて、リークの原因候補を見つけるのが面倒です。 ルートへの同じパス参照グラフのスクリーンショット。ただし、[ホット パスのみを表示] はオフで、多くの可能なデッド エンドが表示されます。

関連項目

Visual Studio メモリ使用量ツールの詳細については、次を参照してください。