jitCompilationStart MDA

Note

Este artigo é específico do .NET Framework. Ele não se aplica a implementações mais recentes do .NET, incluindo o .NET 6 e versões posteriores.

O jitCompilationStart assistente de depuração gerido (MDA) é ativado para reportar quando o compilador just-in-time (JIT) começa a compilar uma função.

Sintomas

O tamanho do conjunto de trabalho aumenta para um programa que já está em formato de imagem nativo, porque mscorjit.dll é carregado no processo.

Motivo

Nem todos os assemblies de que o programa depende foram gerados em formato nativo, ou um assembly não está corretamente registado.

Resolução

Ativar este MDA permite-lhe identificar qual a função que está a ser compilada em JIT. Certifique-se de que o assembly que contém a função é gerado para o formato nativo e devidamente registado.

Efeito no tempo de execução

Este MDA regista uma mensagem pouco antes de um método ser compilado por JIT, pelo que ativar este MDA tem um impacto significativo no desempenho. Se um método for inline, este MDA não gerará uma mensagem separada.

Output

O exemplo de código seguinte mostra a saída de exemplo. Neste caso, o resultado mostra que, no Assembly Test, o método "m" na classe "ns2.CO" foi compilado em JIT.

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

Configuração

O ficheiro de configuração seguinte mostra uma variedade de filtros que podem ser usados para filtrar quais os métodos reportados quando são compilados pela primeira vez por JIT. Pode especificar que todos os métodos sejam reportados definindo o valor do atributo 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 seguinte exemplo de código destina-se a ser usado com o ficheiro 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() { }
        }
    }
}

Ver também