Freigeben über


memberInfoCacheCreation-MDA

Hinweis

Dieser Artikel gilt für das .NET Framework. Sie gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.

Der memberInfoCacheCreation-MDA (Assistent für verwaltetes Debuggen) wird aktiviert, wenn ein MemberInfo-Cache erstellt wird. Dies ist ein starkes Anzeichen für ein Programm, das ressourcenintensive Reflektionsfunktionen verwendet.

Symptome

Der Arbeitssatz eines Programms wird vergrößert, weil das Programm ressourcenintensive Reflektion verwendet.

Ursache

Reflektionsvorgänge, bei denen MemberInfo-Objekte einbezogen werden, gelten als ressourcenintensiv, da sie Metadaten lesen müssen, die in kalten Seiten gespeichert sind und angeben, dass das Programm irgendeine Form von spät gebundenen Szenarios verwendet.

Lösung

Sie können feststellen, wann Reflektion in Ihrem Programm verwendet wird, indem Sie diesen MDA aktivieren und den Code dann in einem Debugger ausführen oder mit einem Debugger anfügen, wenn der MDA aktiviert wird. Mit einem Debugger erhalten Sie eine Stapelüberwachung, die zeigt, wo der MemberInfo-Cache erstellt wurde. Von dort aus können Sie feststellen, wann Ihr Programm Reflektion verwendet.

Die Lösung ist abhängig von den Zielen des Codes. Dieser MDA weist Sie darauf hin, dass das Programm ein spät gebundenes Szenario aufweist. Möglicherweise möchten Sie bestimmen, ob Sie ein früh gebundenes Szenario ersetzen oder die Leistung des spät gebundenen Szenarios berücksichtigen können.

Auswirkungen auf die Laufzeit

Dieser MDA wird für jeden MemberInfo-Cache aktiviert, das erstellt wird. Die Auswirkungen auf die Leistung sind geringfügig.

Ausgabe

Der MDA gibt eine Meldung aus, die anzeigt, dass der MemberInfo-Cache erstellt wurde. Verwenden Sie einen Debugger, um eine Stapelüberwachung zu erhalten, die anzeigt, wann Ihr Programm Reflektion verwendet.

Konfiguration

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

Beispiel

Dieser Beispielcode aktiviert den memberInfoCacheCreation-MDA.

using System;

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

Siehe auch