jitCompilationStart MDA
The jitCompilationStart gerenciado Assistente de depuração (MDA) é ativado para o relatório quando inicia o compilador just-in-time (JIT) compilar uma função.
Sintomas
O conjunto de trabalho aumenta de dimensionar de um programa que já está no formato de imagem nativa porque mscorjit.dll é carregado no processo.
Causa
Nem todos os assemblies que depende do programa foram gerados em formato nativo ou aqueles que têm não estão registrados corretamente.
Resolução
Este MDA permite que você a determinar qual função está sendo compilado em JIT.Determine se o assembly que contém a função é gerado para o formato nativo e registrado corretamente.
Efeito sobre o tempo de execução
Este MDA registra uma mensagem antes de um método é compilado em JIT, para que ativar este MDA tem impacto significativo no desempenho.Observe que, se um método embutido, este MDA não gerará uma mensagem separada.
Saída
O exemplo de código a seguir mostra um exemplo de saída.Nesse caso mostra a saída que o método "m" na classe "ns2.CO" teste no assembly foi compilado em JIT.
method name="Test!ns2.C0::m"
Configuração
O arquivo de configuração a seguir mostra uma variedade de filtros que podem ser empregadas para filtrar quais métodos são reportados quando eles são primeiramente compilado em JIT.Você pode especificar que todos os métodos ser relatado, definindo o valor do atributo nome para *.
<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>
Exemplo
Exemplo de código a seguir se destina a ser usado com o arquivo de configuração anterior.
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() { }
}
}
}
Consulte também
Conceitos
Diagnosticar erros com assistentes de depuração gerenciadas
Visão geral do empacotamento interop