Freigeben über


jitCompilationStart-MDA

Der jitCompilationStart-MDA (Managed Debugging Assistant, Assistent für verwaltetes Debuggen) wird für die Berichterstellung aktiviert, wenn der Just-In-Time-Compiler (JIT) mit dem Kompilieren einer Funktion beginnt.

Symptome

Die Größe des WorkingSets vergrößert sich für ein Programm, das bereits im Format für das systemeigene Abbild vorliegt, da mscorjit.dll in den Prozess geladen wird.

Ursache

Nicht alle Assemblys, von denen das Programm abhängt, wurden im systemeigenen Format generiert, oder sie wurden nicht ordnungsgemäß registriert.

Lösung

Durch das Aktivieren dieses MDA können Sie ermitteln, welche Funktion gerade vom JIT-Compiler verarbeitet wird. Ermitteln Sie, ob die Assembly, die diese Funktion enthält, im systemeigenen Format generiert und ordnungsgemäß registriert wurde.

Auswirkungen auf die Laufzeit

Dieser MDA protokolliert eine Meldung, bevor eine Methode vom JIT-Compiler verarbeitet wird. Das Aktivieren dieses MDA wirkt sich somit erheblich auf die Leistung aus. Beachten Sie, dass dieser MDA keine separate Meldung generiert, wenn es sich um eine Inlinemethode handelt.

Output

Das folgende Codebeispiel zeigt eine Beispielausgabe. In vorliegenden Fall geht aus der Ausgabe hervor, dass in Assembly Test die Methode "m" für die Klasse "ns2.CO" vom JIT-Compiler kompiliert wurde.

    method name="Test!ns2.C0::m"

Konfiguration

Die folgende Konfigurationsdatei zeigt eine Reihe von Filtern, die angewendet werden können, um die Methoden einzugrenzen, deren erstmalige Verarbeitung durch den JIT-Compiler gemeldet werden soll. Sie können angeben, dass Meldungen zu allen Methoden erstellt werden, indem Sie als Wert des Namensattributs * festlegen.

<mdaConfig>
  <assistants>
    <jitCompilationStart>
      <methods>
        <match name="C0::m" />
        <match name="MyMethod" />
        <match name="C2::*" />
        <match name="ns0::*" />
        <match name="ns1.C0::*" />
        <match name="ns2.C0::m" />
        <match name="ns2.C0+N0::m" />
      </methods>
    </jitCompilationStart >
  </assistants>
</mdaConfig>

Beispiel

Das folgende Codebeispiel bezieht sich auf die vorangehende Konfigurationsdatei.

using System;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

public class Entry
{
    public static void Main(string[] args)
    {
        C0.m();
        C1.MyMethod();
        C2.m();

        ns0.C0.m();
        ns0.C0.N0.m();
        ns0.C1.m();

        ns1.C0.m();
        ns1.C0.N0.m();

        ns2.C0.m();
        ns2.C0.N0.m();
    }
}

public class C0
{
    [MethodImpl(MethodImplOptions.NoInlining)]
    public static void m() { }
}

public class C1
{
    [MethodImpl(MethodImplOptions.NoInlining)]
    public static void MyMethod() { }
}

public class C2
{
    [MethodImpl(MethodImplOptions.NoInlining)]
    public static void m() { }
}

namespace ns0
{
    public class C0
    {
        [MethodImpl(MethodImplOptions.NoInlining)]
        public static void m() { }

        public class N0
        {
            [MethodImpl(MethodImplOptions.NoInlining)]
            public static void m() { }
        }
    }

    public class C1
    {
        [MethodImpl(MethodImplOptions.NoInlining)]
        public static void m() { }
    }
}

namespace ns1
{
    public class C0
    {
        [MethodImpl(MethodImplOptions.NoInlining)]
        public static void m() { }
        public class N0
        {
            [MethodImpl(MethodImplOptions.NoInlining)]
            public static void m() { }
        }
    }
}

namespace ns2
{
    public class C0
    {
        [MethodImpl(MethodImplOptions.NoInlining)]
        public static void m() { }

        public class N0
        {
            [MethodImpl(MethodImplOptions.NoInlining)]
            public static void m() { }
        }
    }
}

Siehe auch

Referenz

MarshalAsAttribute

Konzepte

Diagnostizieren von Fehlern mit Assistenten für verwaltetes Debuggen

Interop-Marshalling