Sobre a API de criação de perfil
Um criador de perfil é uma ferramenta que monitora a execução de outro aplicativo. Um criador de perfil de tempo de execução (CLR) de linguagem comum é uma biblioteca de vínculo dinâmico (DLL) que consiste em funções que receber mensagens e enviem mensagens para o CLR usando a API de criação de perfil. O criador de perfil DLL é carregado pelo CLR em time de execução.
Definindo o perfil tradicional ferramentas se concentre nos medindo a execução do aplicativo. Isto é, mede o time gasto em cada função ou o Uso de Memória do aplicativo ao longo do time. A API de criação de perfil destina-se a classe mais ampla de ferramentas de diagnóstico, sistema autônomo utilitários de cobertura de código e até mesmo avançados auxílios de depuração. Esses usos são todos diagnóstico por natureza. A API de criação de perfil não só mede, mas também monitora a execução de um aplicativo. Por esse motivo, a API de criação de perfil nunca deve ser usada pelo aplicativo propriamente dito e execução do aplicativo não deve dependem (ou ser afetada por) o criador de perfil.
Definindo o perfil de um aplicativo do CLR requer suporte maior que o perfil convencionalmente computador código compilado. Isso ocorre porque o CLR apresenta sistema autônomo conceitos, sistema autônomo domínios de aplicativos, coleta de lixo, gerenciado de manipulação de exceção, compilação just-in-time (JIT) de código (convertendo Microsoft intermediate linguagem ou MSIL, código no código de computador nativo) e recursos semelhantes. Mecanismos de criação de perfil convencionais não é possível identificar ou fornecer informações úteis sobre esses recursos. A API de criação de perfil fornece essas informações ausentes com eficiência, com impacto mínimo sobre o desempenho do CLR e o aplicativo perfilado.
Compilação JIT em time de execução fornece mercadoria oportunidades para a criação de perfil. A API de criação de perfil permite que um criador de perfil alterar o fluxo de código MSIL de memória para uma rotina antes de que é compilado em JIT. Dessa forma, o criador de perfil dinamicamente pode adicionar código de instrumentação a determinado rotinas que precisam de investigação mais profunda. Embora essa abordagem seja possível em cenários convencionais, é muito mais fácil de implementar para o CLR, usando a API de criação de perfil.
Normalmente, a API de criação de perfil é usada para gravar um criador de perfil de código, que é um programa que monitora a execução de um aplicativo gerenciado.
A API de criação de perfil é usada por um criador de perfil de DLL, que é carregado no mesmo processo sistema autônomo o aplicativo que está sendo perfilado. O criador de perfil DLL implementa uma interface de retorno de chamada (ICorProfilerCallback no .NET estrutura versão 1.0 e 1.1, ICorProfilerCallback2 na versão 2.0). O CLR chama os métodos na interface para notificar o criador de perfil de eventos do processo com perfil. O criador de perfil pode chamar novamente no tempo de execução usando os métodos no ICorProfilerInfo and ICorProfilerInfo2 interfaces para obter informações sobre o estado da aplicação com perfil.
![]() |
---|
Apenas a parte de coleta de dados da solução criador de perfil deve estar sendo executado no mesmo processo sistema autônomo o aplicativo perfilado. Todos os usuário interface e análise de dados deve ser executada em um processo separado. |
A ilustração a seguir mostra como o criador de perfil DLL interage com o aplicativo que está sendo perfilado e o CLR.
Arquitetura de criação de perfil
ICorProfilerCallback and ICorProfilerCallback2 pode ser considerada interfaces de notificação. Essas interfaces consistem de métodos, sistema autônomo ClassLoadStarted, ClassLoadFinished, and JITCompilationStarted. Sempre que o CLR carrega ou descarrega uma classe, compila uma função e assim por diante, ele chama o método correspondente do criador de perfil ICorProfilerCallback ou ICorProfilerCallback2 interface.
Por exemplo, um criador de perfil poderia medir o desempenho do código por meio de duas funções de notificação: FunctionEnter2 and FunctionLeave2. Ele apenas carimbos de data / time cada notificação, acumula os resultados e produz uma lista que indica quais funções consumido mais time da CPU ou relógio parede durante a execução do aplicativo.
As outras principais interfaces envolvidas na criação de perfil são ICorProfilerInfo and ICorProfilerInfo2. O criador de perfil chama essas interfaces conforme necessário para obter mais informações para ajudar a sua análise. Por exemplo, sempre que o CLR chama o FunctionEnter2 função, ele fornece um identificador de função. O criador de perfil pode obter mais informações sobre essa função, chamando o ICorProfilerInfo2::GetFunctionInfo2 método para descobrir a classe do pai da função, nome e assim por diante.