Partilhar via


Combinando gerenciado e código não gerenciado no criador de perfil de código

Um criador de perfil escrito incorretamente pode causar referências circulares a mesma, resultando em um comportamento imprevisível.

Uma análise do CLR API de criação de perfil pode criar a impressão de que você pode escrever um criador de perfil que contém gerenciado e não gerenciado componentes que telefonar uns aos outros por meio de interoperabilidade COM ou indiretas telefonar s.

Embora isso seja possível de uma perspectiva de design, a API de criação de perfil não oferece suporte a componentes gerenciado. Um criador de perfil do CLR deve ser completamente não gerenciado. Tenta agrupar gerenciados e código não gerenciado um CLR criador de perfil pode causar violações de acesso, falha de programa ou deadlocks. Os componentes gerenciado do criador de perfil acionará eventos seus componentes não gerenciado, que seriam subseqüentemente telefonar os componentes gerenciado novamente, resultando em referências circulares.

O único local onde um CLR criador de perfil pode telefonar código gerenciado é com segurança no Microsoft intermediate linguagem (MSIL) corpo de um método. Antes da compilar just-in-time (JIT) de uma função é concluída, o criador de perfil pode inserir gerenciado chama no corpo MSIL de um método e, em seguida, compilar JIT (consulte o ICorProfilerInfo::GetILFunctionBody método). Essa técnica pode ser usada com êxito para a instrumentação seletiva de código gerenciado ou para coletar dados de estatísticas e de desempenho sobre o JIT.

Como alternativa, um criador de perfil de código pode inserir ganchos nativo no corpo MSIL de cada função gerenciada que chama código não gerenciado. Essa técnica pode ser usada para instrumentação e cobertura. Por exemplo, um criador de perfil de código poderia inserir instrumentação ganchos após cada bloco MSIL para garantir que o bloco foi executado. A modificação do corpo da MSIL de um método é uma operação muito delicada e há muitos fatores que devem ser levadas em consideração.

Consulte também

Outros recursos

Conceitos chave na API de criação de perfil

Visão geral de criação de perfil