Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Catatan
Artikel ini khusus untuk .NET Framework. Ini tidak berlaku untuk implementasi .NET yang lebih baru, termasuk .NET 6 dan versi yang lebih baru.
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() { }
}
}
}