jitCompilationStart – pomocník spravovaného ladění (MDA)
Poznámka:
Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.
Pomocník jitCompilationStart
pro spravované ladění (MDA) se aktivuje, když kompilátor JIT (just-in-time) začne kompilovat funkci.
Příznaky
Velikost pracovní sady se zvyšuje pro program, který je již ve formátu nativní bitové kopie, protože mscorjit.dll je načten do procesu.
Příčina
Ne všechna sestavení, na kterých program závisí, byla generována do nativního formátu nebo sestavení není správně registrováno.
Rozlišení
Povolením této sady MDA zjistíte, která funkce se kompiluje podle potřeby. Ujistěte se, že sestavení, které obsahuje funkci, je generováno do nativního formátu a správně zaregistrováno.
Vliv na modul runtime
Tato autorita MDA zaznamená zprávu těsně před kompilací metody JIT, takže povolení této mdA má významný dopad na výkon. Pokud je metoda vložená, tato mdA negeneruje samostatnou zprávu.
Výstup
Následující ukázka kódu ukazuje ukázkový výstup. V tomto případě výstup ukazuje, že metoda "m" ve třídě "ns2.CO" byla zkompilována JIT.
method name="Test!ns2.C0::m"
Konfigurace
Následující konfigurační soubor ukazuje celou řadu filtrů, které je možné použít k odfiltrování metod, které jsou hlášeny při prvním zkompilování JIT. Můžete určit, že všechny metody budou hlášeny nastavením hodnoty atributu name na *.
<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>
Příklad
Následující ukázka kódu je určena k použití s předchozím konfiguračním souborem.
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() { }
}
}
}