Compartilhar via


Geração de código na API de criação de perfil

Este tópico discute o fluxo de código para código nativo e como um gerador de perfil pode controlar a geração de código do Microsoft intermediate language (MSIL).

Automática Versus Manual geração de código

O MSIL de um.Assembly do NET Framework pode ser compilado para código nativo em uma destas duas maneiras:

  • Compilação manual: A ferramenta Native Image Generator (NGen. exe) pode ser usada para criar uma imagem nativa.

  • Compilação automática: O common language runtime (CLR) pode executar a compilação just-in-time (JIT) em tempo de execução.

NGen. exe e o compilador JIT fornecem os sinalizadores que controlam a geração de código.

Quando um assembly é carregado, o CLR primeiro procura uma imagem nativa para o assembly. Se ele não é possível localizar uma imagem nativa com o conjunto certo de sinalizadores de geração de código, o CLR será compilação JIT as funções no assembly como eles são necessários durante a execução. Mesmo quando uma imagem nativa é encontrada e carregado, o CLR pode compilação JIT algumas das funções no assembly.

Controle do Profiler sobre a geração de código

O profiler usa os sinalizadores na tabela a seguir para controlar a geração de código.

Sinalizador

Efeito

COR_PRF_USE_PROFILE_IMAGES

(Requer o.NET Framework versão 2.0). Faz com que a pesquisa de imagem nativa procurar imagens profiler aprimorado (ngen /profile). Se a pesquisa não conseguir localizar uma imagem nativa do profiler aprimorado para um determinado conjunto, o CLR será em vez disso, compilação JIT os métodos no assembly como eles são necessários.

Não tem efeito no código compilado JIT.

COR_PRF_DISABLE_INLINING

Não tem efeito sobre a pesquisa de imagem nativa.

Na compilação JIT, desativa inlining. Todas as outras otimizações permanecerão em vigor.

COR_PRF_DISABLE_OPTIMIZATIONS

Não tem efeito sobre a pesquisa de imagem nativa.

Na compilação JIT, desativa todas as otimizações, incluindo inlining.

COR_PRF_MONITOR_ENTERLEAVE

Faz com que a pesquisa de imagem nativa procurar imagens profiler aprimorado (ngen /profile).

Na compilação JIT, inserções insira/deixar ganchos no código gerado.

COR_PRF_MONITOR_CODE_TRANSITIONS

Faz com que a pesquisa de imagem nativa procurar imagens profiler aprimorado (ngen /profile).

Na compilação JIT, insere ganchos em pontos de transição gerenciados/não gerenciados.

Geradores de perfis e imagens nativas

Quando o NGen. exe cria uma imagem nativa, ele faz grande parte do trabalho que o CLR geralmente executa em tempo de execução (por exemplo, classe carregamento e a função compilation). Como resultado, em casos onde o trabalho foi feito no tempo NGen, os seguintes retornos de chamada do gerador de perfil não serão recebidos em tempo de execução:

Imagens nativas do Profiler aprimorado

A criação de uma imagem nativa com NGen. exe ativa um conjunto de sinalizadores de geração de código que facilitam a imagem do perfil, como segue:

Considerações sobre desempenho

O método usado para criar o perfil de seu aplicativo gerado por NGen depende de duas considerações: os dados que você precise adquirir e o efeito de criação de perfil incorporado prende em seu aplicativo.

Conforme discutido anteriormente neste tópico, existem dois cenários de criação de perfil NGen básicos:

  • Imagens nativas regulares (gerado por NGen imagens sem ganchos de criação de perfil): Essas imagens não causa qualquer sobrecarga da criação de perfil. No entanto, os retornos de chamada de carregar/descarregar classe não estão disponíveis para imagens nativas de regulares. Para lidar com essa situação, um gerador de perfil que deseja solicitar imagens nativas do profiler aprimorado terá que coletar dados sobre FunctionIDs ou ClassIDs como as identificações são encontrados. Por exemplo, um gerador de perfil de amostragem não encontrará um FunctionID quando FunctionID primeiro é compilado em JIT ou carregado a partir de uma imagem gerado por NGen, porque os retornos de chamada de carregamento/descarregamento de classe não são emitidos para regular gerado por NGen imagens. O profiler encontrará o FunctionID mais tarde, quando um exemplo que mostra o processo estava sendo executado em um ponteiro de instrução (IP) dentro do corpo do código compilado. da função Nesse caso, o profiler poderia consultar para obter informações sobre a função durante a amostragem ou pode fazer logon a FunctionID ou seu token de metadados associados para consultar ainda mais tarde. Portanto, o profiler consultará para obter informações sobre o FunctionID ou ClassID apenas no último momento possível (quando ele detecta que realmente é usada a identificação) em vez de versões anteriores, quando a identificação do primeiro produzida.

  • Profiler aprimorado imagens nativas (gerado por NGen imagens com ganchos de criação de perfil incorporados): Essas imagens são maiores e diferem significativamente de imagens regulares. Além disso, o comportamento do aplicativo pode ser diferente quando ele inclui os ganchos do profiler. Portanto, você deve usar o profiler aprimorado imagens nativas somente se o desempenho potencial e conseqüências de comportamentos (sobrecarga) são aceitáveis.

Consulte também

Conceitos

Visão geral de criação de perfil