Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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() { }
}
}
}