Share via


jitCompilationStart MDA

A jitCompilationStart felügyelt hibakeresési segéd (MDA) aktiválva van a jelentéshez, amikor az igény szerinti (JIT) fordító elkezd lefordítani egy függvényt.

Hibajelenségek

A munkakészlet mérete megnő egy már natív képformátumú program esetében, mert mscorjit.dll betöltődik a folyamatba.

Ok

Nem minden szerelvény van létrehozva natív formátumban, vagy egy szerelvény nincs megfelelően regisztrálva.

Feloldás

Ennek az MDA-nak a engedélyezése lehetővé teszi annak azonosítását, hogy melyik függvényt fordítják JIT-fordításra. 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.

Hatás a futtatókörnyezetre

Ez az MDA közvetlenül a metódus JIT-fordítása 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.

Kimenet

Az alábbi kódminta a mintakimenetet mutatja 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 legyenek jelentve 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ájlhoz 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