Criação de perfil alterações no .NET estrutura 2.0
A API de criação de perfil foi avançado no .NET estrutura versão 2.0 para fornecer recursos adicionais. A nova funcionalidade é exposta por meio de duas novas interfaces: ICorProfilerCallback2 and ICorProfilerInfo2.
Um criador de perfil de DLL que foi escrito para o .NET estrutura versão 1.0 ou 1.1 não funcionará corretamente no ambiente do .NET estrutura 2.0 common linguagem tempo de execução (CLR). Para atualizar seu criador de perfil DLL para funcionar com a versão 2.0, você deve implementar o ICorProfilerCallback2 interface. The ICorProfilerInfo2 interface herda o ICorProfilerInfo interface e introduz novos métodos que oferecem suporte à interação avançado com o CLR.
Genéricos
A introdução de genéricos no tempo de execução causou três alterações na API de criação de perfil:
Um mapeamento um-para-um não mais existe entre typedef tokens e ClassID valores, ou entre MethodDef tokens e FunctionID valores. Isso acontece porque cada classe ou função pode ser instanciada para vários tipos diferentes. Os autores do criador de perfil devem ler Profiling e identificações de notificação de tempo de execução, examine como usar o ICorProfilerInfo::GetClassFromToken and ICorProfilerInfo::GetFunctionFromToken métodos no seu código e regravar seus códigos de forma compatível com os genéricos. A API de criação de perfil fornece dois métodos novos, ICorProfilerInfo2::GetClassFromTokenAndTypeArgs and ICorProfilerInfo2::GetFunctionFromTokenAndTypeArgs, para oferecer suporte a genéricos.
Não existe um mapeamento direto entre um FunctionID e o ClassID Ele contém. Otimizações de compartilhamento de código podem permitir que diferentes instanciações de um tipo genérico para compartilhar o código. Você pode determinar o ClassID de um FunctionID somente quando você examiná-los no contexto de ativação de um determinado da função.
Os métodos de informações de função no e classe existenteICorProfilerInfo interface não fornecem informações sobre os argumentos de tipo de funções e tipos genéricos. The ICorProfilerInfo2::GetClassIDInfo2 and ICorProfilerInfo2::GetFunctionInfo2 métodos foram fornecidos para essa finalidade. Observe que esses métodos não podem sempre fornecer essas informações, consulte Profiling e identificações de notificação de tempo de execução Para obter mais informações.
separação de código
Os assemblies do .NET estrutura tem encomendado anteriormente um recurso de otimização de desempenho. Pré-compilado código nativo foi dividido em várias regiões por função. Portanto, o existente ICorProfilerInfo::GetCodeInfo método não é mais corretamente pode descrever a extensão de código nativo da função. Geradores de perfis devem comutador para usar o mais geral ICorProfilerInfo2::GetCodeInfo2 método em vez disso.
Remoção de in-processo depuração
No .NET estrutura 2.0, a depuração em andamento foi substituído com um conjunto de funcionalidade que é consistente com a API de criação de perfil. The instantâneo da pilha and objeto de inspeção recursos são o resultado.
Retornos de chamada com o nativo imagem gerador
Otimizações significativas no nativo Image gerador (NGen.exe) tiverem movido ainda mais trabalho de time de execução para geração de imagem nativa time. Isso levou às seguintes alterações no comportamento da API de criação de perfil:
Para a maioria das funções, JITCachedFunctionSearch retornos de chamada não são recebidos na nativo imagens. Um criador de perfil tem duas opções, dependendo de como ele usa retornos de chamada:
Se o criador de perfil usa retornos de chamada para coletar informações sobre uma função, ele pode comutador para um esquema em que informações são coletadas sobre uma determinada função somente quando essa função primeiro é encontrada durante a execução do programa.
Se o criador de perfil usa retornos de chamada para forçar uma função a ser just-in-time (JIT) compilado para fins de instrumentação, ele pode utilizar profiler avançado nativo imagens em vez disso. Para obter mais informações, consulte Geração de código na API de criação de perfil.
Para a maioria dos tipos, ClassLoad retornos de chamada não são recebidos na nativo imagens. Geradores de perfis devem usar técnicas de avaliação do time de execução (também chamadas avaliação lenta) para essas classes. Geradores de perfis que já estão usando o criador de perfil avançado nativo imagens não são necessário alterar seu comportamento. No entanto, um criador de perfil deve comutador não avançado para o criador de perfil nativo imagens, a menos que ele precisa essas imagens por outros motivos, porque o criador de perfil avançado nativo imagens são significativamente diferentes de imagens regulares.
Lixo coleção Callbacks aprimorada
O lixo coleção retornos de chamada foram avançado de diversas maneiras. Retornos de chamada agora notificam o gerador de perfil que lixo coleção alças ter sido criadas ou destruído, fornecem informações sobre o enfileirar de objetos a ser finalizado e usar o Collect método para forçar um lixo coleção. The ICorProfilerCallback2::RootReferences2 método, que é uma extensão de ICorProfilerCallback::RootReferences, fornece informações sobre o tipo de cada raiz. Finalmente, a ICorProfilerCallback2::SurvivingReferences método relata o layout dos objetos na heap é causado por um lixo sem compactação coleção.
Objetos congelados
Objetos congelados, que são novos no .NET estrutura 2.0, são objetos constante que são inicializados imagem nativa em time de geração e gravados em imagem nativa. Objetos congelados não são realocados pela coleta de lixo, mas podem ser consultadas por objetos de coleta de lixo. O novo ICorProfilerInfo2::EnumModuleFrozenObjects método permite que criadores de perfis enumerar objetos congelados.
Diversas alterações de API
O .NET estrutura 2.0 também resulta nas seguintes alterações de API diversas:
The ICorProfilerInfo::SetFunctionReJIT método agora retorna E_NOIMPL. Em versões anteriores, chamar este método resultou em deadlock.
O novo ICorProfilerCallback2::ThreadNameChanged método fornece notificação de thread alterações de nome.
O novo ICorProfilerInfo2::GetThreadAppDomain método aceita uma ID de thread e retorna o domínio do aplicativo no qual thread está sendo executado.
Consulte também
Outros recursos
Criação de perfil do .NET estrutura