Partilhar via


jitCompilationStart MDA

O jitCompilationStart Assistente de depuração gerenciada (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 tamanho 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 são registrados.

Resolução

Este MDA permite que você determine 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, portanto, permitindo que este MDA tem um impacto significativo no desempenho. Observe que, se um método embutido, este MDA não irá gerar uma mensagem separada.

Saída

O exemplo de código a seguir mostra um exemplo de saída. Nesse caso a saída mostra que, em conjunto, teste o método "m" na classe "ns2.CO" 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 estiverem primeiro compilado em JIT. Você pode especificar que todos os métodos ser relatado, definindo o valor do atributo name 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

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

Consulte também

Referência

MarshalAsAttribute

Conceitos

Diagnosticar erros com assistentes de depuração gerenciada

Interop Marshaling