jitCompilationStart MDA

Feljegyzés

Ez a cikk a .NET-keretrendszer vonatkozik. Ez nem vonatkozik a .NET újabb implementációira, beleértve a .NET 6-os és újabb verzióit.

A jitCompilationStart felügyelt hibakeresési segéd (MDA) aktiválva van, hogy jelentést készítsen, amikor a just-in-time (JIT) fordító elkezd lefordítani egy függvényt.

Hibajelenségek

A már natív képformátumú programok munkakészletének mérete nő, mivel mscorjit.dll betöltődik a folyamatba.

Ok

Nem minden szerelvények a program függ generált natív formátumban, vagy egy szerelvény nincs megfelelően regisztrálva.

Resolution (Osztás)

Ennek az MDA-nak a engedélyezése lehetővé teszi annak azonosítását, hogy melyik függvényt állítja össze a JIT. Győződjön meg arról, hogy a függvényt tartalmazó szerelvény natív formátumban jön létre, és megfelelően van regisztrálva.

A futtatókörnyezetre gyakorolt hatás

Ez az MDA éppen a JIT-fordítás előtt naplóz egy üzenetet, így ennek az MDA-nak az engedélyezése jelentős hatással van a teljesítményre. Ha egy metódus beágyazott, ez az MDA nem hoz létre külön üzenetet.

Hozam

Az alábbi kódminta mintakimenetet mutat be. Ebben az esetben a kimenet azt mutatja, hogy a szerelvénytesztben a "ns2.CO" osztály "m" metódusa JIT-fordítású volt.

method name="Test!ns2.C0::m"

Konfiguráció

Az alábbi konfigurációs fájl számos olyan szűrőt mutat be, amelyek segítségével kiszűrhető, hogy mely metódusok jelennek meg az első JIT-fordításkor. A névattribútum *értékre állításával megadhatja, hogy az összes metódust jelenteni lehessen.

<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élda

Az alábbi kódmintát az előző konfigurációs fájllal kell használni.

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

Lásd még