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ż