memberInfoCacheCreation MDA
memberInfoCacheCreation マネージ デバッグ アシスタント (MDA: Managed Debugging Assistant) は、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();
}
}