memberInfoCacheCreation MDA

Note

この記事は .NET Framework に固有のものです。 .NET 6 以降のバージョンを含む、.NET の新しい実装には適用されません。

memberInfoCacheCreation マネージド デバッグ アシスタント (MDA) は、MemberInfo キャッシュが作成されるとアクティブになります。 これは、リソースに大きな負荷のかかるリフレクション機能をプログラムが使っていることを明確に示すものです。

現象

プログラムがリソースに負荷のかかるリフレクションを使っているため、プログラムのワーキング セットが増加します。

原因

MemberInfo オブジェクトが関係するリフレクション操作は、コールド ページに格納されているメタデータを読み取る必要があり、一般にプログラムが何らかの種類の遅延バインディング シナリオを使っていることを示すため、リソースに負荷がかかるものと見なされます。

解決方法

この MDA を有効にした後にデバッガーでコードを実行するか、または MDA がアクティブになっているときにデバッガーとアタッチすることにより、プログラム内でリフレクションで使われている場所を特定できます。 デバッガーで実行すると、MemberInfo キャッシュが作成された場所を示すスタック トレースが取得され、その情報からプログラムがリフレクションを使っている場所を判断できます。

解決策は、コードの目的によって異なります。 この MDA は、プログラムに遅延バインディング シナリオがあることを警告します。 事前バインディング シナリオに置き換えることができるかどうかを判断したり、遅延バインディング シナリオのパフォーマンスを検討したりできます。

ランタイムへの影響

この MDA は、作成されるすべての MemberInfo キャッシュに対してアクティブ化されます。 パフォーマンスに与える影響はごくわずかです。

出力

MDA は、MemberInfo キャッシュが作成されたことを示すメッセージを出力します。 プログラムがリフレクションを使っている場所を示すスタック トレースを取得するには、デバッガーを使います。

構成

<mdaConfig>
  <assistants>
    <memberInfoCacheCreation/>
  </assistants>
</mdaConfig>

次のサンプル コードは、memberInfoCacheCreation MDA をアクティブ化します。

using System;

public class Exe
{
    public static void Main()
    {
        typeof(object).GetMethods();
    }
}

関連項目