jitCompilationStart MDA

Note

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

Der jitCompilationStart verwaltete Debugging-Assistent (Managed Debugging Assistant, MDA) wird aktiviert, um zu melden, wann der JIT-Compiler (Just-in-Time) beginnt, eine Funktion zu kompilieren.

Symptome

Die Arbeitssatzgröße steigt für ein Programm, das sich bereits im systemeigenen Bildformat befindet, da mscorjit.dll in den Prozess geladen wird.

Ursache

Nicht alle Assemblys, von denen das Programm abhängig ist, wurden im systemeigenen Format generiert, oder eine Assembly ist nicht ordnungsgemäß registriert.

Auflösung

Wenn Sie diese MDA aktivieren, können Sie ermitteln, welche Funktion JIT-kompiliert wird. Stellen Sie sicher, dass die Assembly, die die Funktion enthält, in systemeigenem Format generiert und ordnungsgemäß registriert wird.

Auswirkung auf die Laufzeit

Diese MDA protokolliert eine Nachricht unmittelbar vor der JIT-Kompilierung einer Methode, sodass die Aktivierung dieser MDA erhebliche Auswirkungen auf die Leistung hat. Wenn eine Methode inline ist, generiert diese MDA keine separate Nachricht.

Output

Das folgende Codebeispiel zeigt die Beispielausgabe. In diesem Fall zeigt die Ausgabe an, dass die Methode "m" für die Klasse "ns2.CO" im Assemblytest JIT-kompiliert wurde.

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

Konfiguration

Die folgende Konfigurationsdatei zeigt eine Vielzahl von Filtern, die verwendet werden können, um herauszufiltern, welche Methoden beim ersten JIT-kompiliert werden. Sie können angeben, dass alle Methoden gemeldet werden, indem Sie den Wert des Namensattributes auf *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>

Example

Das folgende Codebeispiel soll mit der vorherigen Konfigurationsdatei verwendet werden.

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