jitCompilationStart MDA

當 Just-In-time (JIT) 編譯器開始編譯函式時,會啟動 jitCompilationStart Managed 偵錯助理 (MDA)。

徵兆

mscorjit.dll 已載入處理序中,因此已是原生映像格式的程式工作集大小會增加。

原因

並非所有程式相依的組件都是以原生格式產生,或者是組件未正確註冊。

解決方案

啟用此 MDA 可讓您識別哪一個函式正在進行 JIT 編譯。 確認包含函式的組件是否以原生格式產生,且已正確註冊。

對執行階段的影響

此 MDA 會在方法剛要進行 JIT 編譯之前記錄訊息,所以啟用此 MDA 會對效能造成重大影響。 如果是內嵌的方法,這個 MDA 就不會另行產生訊息。

輸出

下列程式碼範例會顯示範例輸出。 在本案例中,輸出會顯示組件 Test 中,類別 "ns2.CO" 的方法 "m" 已經過 JIT 編譯。

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

組態

下列組態檔顯示的各種篩選器,可用來篩選出第一次 JIT 編譯時要報告哪些方法。 您可以將名稱屬性的值設定為 *,指定回報所有的方法。

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

範例

下列程式碼範例是用來搭配先前的組態檔。

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

另請參閱