jitCompilationStart MDA

激活 jitCompilationStart 托管调试助手 (MDA) 以报告实时 (MDA) 编译器何时开始编译函数。

症状

由于 mscorjit.dll 加载到此进程中,对于已采用本机映像格式的程序,工作集大小会增加。

原因

并非程序依靠的所有程序集均已生成为本机格式,或程序集未正确注册。

解决方法

通过启用此 MDA,可确定哪一个函数正在进行 JIT 编译。 确定包含此函数的程序集生成为本机格式并且正确注册。

对运行时的影响

此 MDA 在方法进行 JIT 编译前记录消息,因此启用此 MDA 会对性能产生重大影响。 如果方法是内联的,此 MDA 不会生成单独的消息。

输出

下面的代码示例显示了示例输出。 在此情况下,输出显示在程序集测试中,类“ns2.CO”上的方法“m”是 JIT 编译。

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

Configuration

以下配置文件显示多种筛选器,可筛选出首次 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() { }  
        }  
    }  
}  

请参阅