jitCompilationStart MDA
Asystent jitCompilationStart
zarządzanego debugowania (MDA) jest aktywowany w celu raportowania, gdy kompilator just in time (JIT) rozpoczyna kompilowanie funkcji.
Objawy
Rozmiar zestawu roboczego zwiększa się dla programu, który jest już w formacie obrazu natywnego, ponieważ mscorjit.dll jest ładowany do procesu.
Przyczyna
Nie wszystkie zestawy, od których zależy program, zostały wygenerowane w formacie natywnym lub zestaw nie jest poprawnie zarejestrowany.
Rozwiązanie
Włączenie tego rozwiązania MDA pozwala określić, która funkcja jest kompilowana w trybie JIT. Upewnij się, że zestaw zawierający funkcję jest generowany w formacie natywnym i poprawnie zarejestrowany.
Wpływ na środowisko uruchomieniowe
Ta usługa MDA rejestruje komunikat tuż przed skompilowaniem metody JIT, dlatego włączenie tej usługi MDA ma znaczący wpływ na wydajność. Jeśli metoda jest wbudowana, ta usługa MDA nie wygeneruje oddzielnego komunikatu.
Dane wyjściowe
Poniższy przykładowy kod przedstawia przykładowe dane wyjściowe. W tym przypadku dane wyjściowe pokazują, że w teście zestawu metoda "m" w klasie "ns2.CO" została skompilowana w trybie JIT.
method name="Test!ns2.C0::m"
Konfigurowanie
Poniższy plik konfiguracji przedstawia różne filtry, które można zastosować do filtrowania metod zgłaszanych podczas pierwszego kompilowania JIT. Można określić, że wszystkie metody mają być zgłaszane, ustawiając wartość atrybutu 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>
Przykład
Poniższy przykładowy kod jest przeznaczony do użycia z poprzednim plikiem konfiguracji.
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() { }
}
}
}
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla