Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Note
Este artigo é específico para .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.
O jitCompilationStart MDA (assistente de depuração gerenciado) é ativado para relatar quando o compilador JIT (just-in-time) começa a compilar uma função.
Symptoms
O tamanho do conjunto de trabalho aumenta para um programa que já está no formato de imagem nativa, porque mscorjit.dll é carregado no processo.
Cause
Nem todos os assemblies dos quais o programa depende foram gerados em formato nativo ou um assembly não está registrado corretamente.
Resolução
Habilitar esse MDA permite que você identifique qual função está sendo compilada por JIT. Verifique se o assembly que contém a função é gerado para o formato nativo e registrado corretamente.
Efeito no runtime
Esse MDA registra uma mensagem logo antes de um método ser compilado por JIT, portanto, habilitar esse MDA tem um impacto significativo no desempenho. Se um método estiver embutido, esse MDA não gerará uma mensagem separada.
Saída
O exemplo de código a seguir mostra a saída de exemplo. Nesse caso, a saída mostra que, no teste de assembly, o método "m" na classe "ns2.CO" foi compilado por JIT.
method name="Test!ns2.C0::m"
Configuração
O arquivo de configuração a seguir mostra uma variedade de filtros que podem ser empregados para filtrar quais métodos são relatados quando são compilados pela primeira vez com JIT. Você pode especificar que todos os métodos sejam relatados definindo o valor do atributo de nome como *.
<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>
Example
O exemplo de código a seguir destina-se 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() { }
}
}
}