Pergunta

Alguém conhece um método para criar contadores de desempenho personalizados usando Visual C++ comum não gerenciado?

Eu sei que isso pode ser feito facilmente usando C++ gerenciado, mas preciso fazer isso usando um serviço não gerenciado do Windows.

Também sei que você pode recuperar dados do contador de desempenho, mas preciso criar alguns contadores personalizados e incrementá-los durante o tempo de execução dos aplicativos.

Foi útil?

Solução

Veja aqui:http://msdn.microsoft.com/en-us/library/aa371925.aspx

Não é realmente difícil, mas um pouco tedioso, pois a API envolve o uso extensivo de estruturas autorreferenciais de comprimento variável e precisa empregar algum mecanismo IPC para obter os dados do processo monitorado.

Outras dicas

O suporte para adicionar contadores de desempenho C++ mudou no Vista e além.A abordagem Performance DLL sugerida em outra resposta ainda funciona, mas a nova técnica descrita aqui é mais fácil de usar.

Nesta abordagem você escreve um manifesto que descreve seus contadores, executa o CTRPP, uma ferramenta que gera código a partir do seu manifesto.Compile e vincule esse código ao seu aplicativo e adicione uma chamada para inicializar o processo (ele inicia um thread em segundo plano) e adicione código para atualizar os contadores conforme necessário.Os detalhes da publicação dos contadores são tratados pelo thread em segundo plano que executa o código gerado.

Você também precisa executar lodctr /m:[arquivo de manifesto] para registrar seus contadores antes que eles possam ser usados.Isso deve ser executado como administrador.

POR FALAR NISSO:Outro programa, unlodctr, reverte o efeito do lodctr e deve ser usado se você fizer alguma alteração em seus contadores porque não há operação de "substituição", apenas exclua o antigo e instale o novo.

<RANT>A documentação para todos os itens acima é simplesmente horrível.Por exemplo, o lodctr foi completamente reformulado para o Vista, mas o documento no MSDN é todo para a versão XP e não se aplica mais.Se você visitar o MSDN, use o botão "Esta documentação não é útil" generosamente e talvez a Microsoft receba a mensagem.</RANT>

Não use as classes de monitor de desempenho ATL.Eu sei que eles são fáceis de adicionar e têm um assistente e tudo, mas estão irremediavelmente bugados.Eu os adicionei a um dos meus aplicativos de desenvolvimento no trabalho e tive que extrair o código seis meses depois.Ao todo, cerca de 3 semanas de trabalho perdidas por causa daquele barulho.

Eu estava procurando por algo um pouco mais fácil de implementar.Provavelmente terei que usar essa abordagem.Um colega (obrigado PJ) também me mostrou que existe um tutorial de Scribble que foi modificado para mostrar como adicionar um contador de desempenho usando classes ATL:Amostra de PerformanceScribble:Monitoramento de desempenho em um aplicativo MFC

A grande desvantagem aqui é que atualmente meu aplicativo não usa MFC ou ATL e eu teria que adicionar suporte para ele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top