Sdílet prostřednictvím


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() { }
        }
    }
}

Viz také