Geração de código na API de criação de perfil
Esta seção discute o fluxo de código Microsoft intermediate linguagem (MSIL) para código nativo e como pode um criador de perfil controle geração de código.
automático versus manual geração de código
O MSIL em um assembly do .NET estrutura pode ser compilado para código nativo de duas maneiras:
Manual de compilação: A ferramenta nativo Image gerador (NGen.exe) pode ser usada para criar uma imagem nativa.
Compilação automático: O common linguagem runtime (CLR) pode executar compilação just-in-time (JIT) em tempo de execução.
Tanto NGen.exe como o compilador JIT oferecem sinaliza que controle geração de código.
Quando um conjunto é carregado, o CLR primeiro procura por um nativo imagem para o assembly. Se não conseguir localizar um nativo imagem com o conjunto certo de sinalizadores de geração de código, o CLR fará compilar JIT sistema autônomo funções no conjunto de módulos (assembly) sistema autônomo eles são necessários durante a execução. Mesmo quando um nativo imagem é localizada e carregado, o CLR pode compilar JIT algumas das funções no conjunto de módulos (assembly).
Controle do criador de perfil sobre geração de código
O criador de perfil usa os sinalizadores a tabela a seguir para controlar a geração de código.
Sinalizador |
Efeito |
---|---|
COR_PRF_USE_PROFILE_IMAGES |
(Requer o .NET estrutura versão 2.0.) Faz com que a imagem nativa Pesquisar para procurar imagens criador de perfil avançado (ngen /profile). Se a Pesquisar não conseguir localizar um avançado criador de perfil nativo imagem para um determinado assembly, o CLR será, em vez disso, compilar JIT sistema autônomo métodos no assembly sistema autônomo eles são necessários. Não tem efeito no código com compilação JIT. |
COR_PRF_DISABLE_INLINING |
Não tem efeito o nativo busca de imagens. Na compilação JIT, desativa o inlining. Todas as outras otimizações permanecerão em vigor. |
COR_PRF_DISABLE_OPTIMIZATIONS |
Não tem efeito o nativo busca de imagens. Na compilação JIT, desativa todas as otimizações, incluindo inlining. |
COR_PRF_MONITOR_ENTERLEAVE |
Faz com que a imagem nativa Pesquisar para procurar imagens criador de perfil avançado (ngen /profile). Na compilação JIT, insere insira/deixar ganchos no código gerado. |
COR_PRF_MONITOR_CODE_TRANSITIONS |
Faz com que a imagem nativa Pesquisar para procurar imagens criador de perfil avançado (ngen /profile). Em compilação JIT, insere ganchos em pontos de transição gerenciado/não gerenciado. |
Geradores de perfis e nativo imagens
Quando NGen.exe cria uma imagem nativa, ela faz grande parte do trabalho que o CLR geralmente executa em time de execução (por exemplo, classe carregamento e a função de compilação). sistema autônomo resultado, em casos onde o trabalho foi realizado no time NGen, sistema autônomo retornos de chamada do criador de perfil seguinte não serão recebidos em time de execução:
avançado criador de perfil nativo imagens
Criando uma imagem nativa com NGen.exe ativa um conjunto de sinalizadores de geração de código que faça esistema autônomoier imagem de analisar, sistema autônomo segue:
Inserir/deixar ganchos são inseridos no código.
gerenciado/não gerenciado transição ganchos são inseridos no código.
ICorProfilerCallback::JITCachedFunctionSearchStarted and ICorProfilerCallback::JITCachedFunctionSearchFinished notificações são emitidas sistema autônomo cada função da imagem nativa é invocada pela primeira time.
ICorProfilerCallback::Clsistema autônomosLoadStarted and ICorProfilerCallback::Clsistema autônomosLoadFinished notificações são emitidas sistema autônomo cada clsistema autônomos da imagem nativa é usado para a primeira vez.
Considerações sobre desempenho
O método usado para fazer o analisar de seu aplicativo gerado por NGen depende de duas considerações: os dados que você precise adquirir e prende o efeito de criação de perfil incorporado em seu aplicativo.
Conforme discutido anteriormente neste tópico, há dois cenários de criação de perfil NGen básicos:
Regular nativo imagens (imagens sem a criação de perfil ganchos gerado por NGen): Essas imagens não causam qualquer sobrecarga da criação de perfil. No entanto, os retornos de chamada de carregamento/descarregar de classe não estão disponível para regular nativo imagens. Para lidar com essa situação, um criador de perfil não deseja solicitar criador de perfil avançado nativo imagens precisará coletar dados sobre FunctionIDsistema autônomo ou ClassIDsistema autônomo sistema autônomo sistema autônomo IDs são encontrados. Por exemplo, um criador de perfil de amostragem não encontrará um FunctionID Quando é primeiro compilação JIT ou carregado a partir de uma imagem NGen gerado, porque os retornos de chamada de carregamento/descarregar de classe não são emitidos para imagens geradas NGen regulares. O criador de perfil encontrará o FunctionID mais tarde, quando um exemplo mostra o processo estava sendo executado em um ponteiro de instrução (IP) dentro do corpo de código compilado da função. Nesse caso, o criador de perfil poderia consultar para obter informações sobre a função durante a amostragem ou ele pode efetuar logon a FunctionID ou seu token de metadados associados para a consulta ainda mais tarde. Portanto, o criador de perfil consultará para obter informações sobre o FunctionID ou ClassID somente no momento possível último (quando ele detecta que realmente é usada a ID) em vez de versões anteriores, quando a ID é produzida pela primeira vez.
criador de perfil avançado nativo imagens (imagens com ganchos de criação de perfil incorporados gerado por NGen): Essas imagens são maiores e diferem consideravelmente entre imagens regulares. Além disso, o comportamento do aplicativo pode ser diferente quando ele inclui ganchos do criador de perfil. Portanto, você deve usar imagens nativas criador de perfil avançado somente se o desempenho potencial e comportamentais conseqüências (sobrecarga) são aceitáveis.