MDA jitCompilationStart

Asisten penelusuran kesalahan terkelola (MDA) jitCompilationStart diaktifkan untuk melaporkan ketika kompiler just-in-time (JIT) mulai mengompilasi fungsi.

Gejala

Ukuran set kerja meningkat untuk program yang sudah dalam format gambar asli, karena mscorjit.dll dimuat ke dalam proses.

Penyebab

Tidak semua rakitan yang bergantung pada program telah dihasilkan ke dalam format asli, atau rakitan tidak terdaftar dengan benar.

Resolusi

Mengaktifkan MDA ini memungkinkan Anda mengidentifikasi fungsi mana yang sedang dikompilasi JIT. Pastikan bahwa rakitan yang berisi fungsi dihasilkan ke format asli dan didaftarkan dengan benar.

Efek pada runtime bahasa umum

MDA ini mencatat pesan tepat sebelum metode dikompilasi JIT, sehingga memungkinkan MDA ini berdampak signifikan pada performa. Jika metode sebaris, MDA ini tidak akan menghasilkan pesan terpisah.

Output

Sampel kode berikut menunjukkan hasil sampel. Dalam hal ini, output menunjukkan bahwa, dalam assembly Test, metode "m" pada kelas "ns2.CO" dikompilasi JIT.

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

Konfigurasi

File konfigurasi berikut menunjukkan berbagai filter yang dapat digunakan untuk memfilter metode mana yang dilaporkan saat pertama kali dikompilasi JIT. Anda dapat menentukan bahwa semua metode dilaporkan dengan mengatur nilai atribut nama ke *.

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

Contoh

Sampel kode berikut dimaksudkan untuk digunakan dengan file konfigurasi sebelumnya.

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

Lihat juga