Partilhar via


Meça o desempenho do aplicativo analisando a utilização da CPU (C#, Visual Basic, C++, F#)

Encontre problemas de desempenho enquanto estiver a depurar com a ferramenta de diagnóstico integrada ao depurador de uso da CPU. Você também pode analisar a utilização da CPU sem ter um depurador ligado ou ao direcionar um aplicativo que está a correr. Para obter mais informações, consulte Executar ferramentas de perfilagem em compilações de lançamento ou depuração e Analisar o desempenho usando a perfilagem de CPU.

Quando o depurador pausa, a ferramenta Uso da CPU na janela Ferramentas de Diagnóstico coleta informações sobre as funções que estão a ser executadas na sua aplicação. A ferramenta lista as funções que estavam executando o trabalho e fornece um gráfico de linha do tempo que você pode usar para se concentrar em segmentos específicos da sessão de amostragem.

Importante

As Ferramentas de Diagnóstico integradas ao depurador são suportadas para desenvolvimento .NET no Visual Studio, incluindo ASP.NET, ASP.NET Core e para desenvolvimento nativo/C++. A carga de trabalho do Visual Studio correspondente é necessária. Para executar ferramentas de perfilagem com o depurador, é necessário o Windows 8 ou posterior (janela Ferramentas de Diagnóstico).

Neste tutorial, você irá:

  • Coletar dados de utilização da CPU
  • Analise os dados de utilização da CPU

Etapa 1: Coletar dados de utilização da CPU

  1. Abra o projeto que você deseja depurar no Visual Studio e defina um ponto de interrupção em seu aplicativo no ponto em que você deseja examinar o uso da CPU.

  2. Defina um segundo ponto de interrupção no final da função ou região de código que você deseja analisar.

    Ao definir dois pontos de interrupção, você pode limitar a coleta de dados às partes do código que deseja analisar.

  3. A janela Ferramentas de Diagnóstico aparece automaticamente, a menos que você a tenha desativado. Para abrir a janela novamente, clique em Depurar>Windows>Mostrar Ferramentas de Diagnóstico.

  4. Você pode escolher se deseja ver de Uso da CPU, de Uso da Memória ou ambos, com a configuração Selecionar Ferramentas na barra de ferramentas. Se você estiver executando o Visual Studio Enterprise, também poderá habilitar ou desabilitar o IntelliTrace em Ferramentas>Opções>IntelliTrace.

    Captura de ecrã que mostra as Ferramentas de Diagnóstico.

    Captura de ecrã que mostra as Ferramentas de Diagnóstico.

    Analisaremos principalmente a utilização da CPU, portanto, certifique-se de que de Uso da CPU esteja ativada (ela está habilitada por padrão).

  5. Clique em Depurar>Iniciar Depuração (ou Iniciar na barra de ferramentas ou F5).

    Quando a aplicação terminar de carregar, aparece a vista Resumo das Ferramentas de Diagnóstico. Se precisar abrir a janela, clique em Debugar>Windows>Mostrar Ferramentas de Diagnóstico.

    Captura de tela que mostra a guia Resumo das Ferramentas de Diagnóstico.

    Captura de tela que mostra a guia Resumo das Ferramentas de Diagnóstico.

    Para obter mais informações sobre os eventos, consulte Pesquisando e filtrando a guia Eventos da janela Ferramentas de Diagnóstico.

  6. Execute o cenário que fará com que seu primeiro ponto de interrupção seja atingido.

  7. Enquanto o depurador estiver pausado, ative a coleta dos dados de Uso da CPU e, em seguida, abra a guia Uso da CPU.

    Captura de tela que mostra que as Ferramentas de Diagnóstico habilitam a criação de perfil da CPU.

    Captura de tela que mostra que as Ferramentas de Diagnóstico habilitam a criação de perfil da CPU.

    Quando você escolhe Gravar perfil de CPU, o Visual Studio começará a gravar suas funções e quanto tempo elas levam para serem executadas. Você só pode exibir esses dados coletados quando o seu aplicativo está interrompido num ponto de paragem.

  8. Pressione F5 para executar o aplicativo até seu segundo ponto de interrupção.

    Agora, você tem dados de desempenho para seu aplicativo especificamente para a região de código que é executada entre os dois pontos de interrupção.

    O criador de perfil começa a preparar dados de thread. Aguarde até que termine.

    Captura de tela que mostra as Ferramentas de Diagnóstico preparando threads.

    Captura de tela que mostra as Ferramentas de Diagnóstico preparando threads.

    A ferramenta Uso da CPU exibe o relatório na guia Uso da CPU.

    Captura de tela que mostra a guia Uso da CPU das Ferramentas de Diagnóstico.

    Captura de tela que mostra a guia Uso da CPU das Ferramentas de Diagnóstico.

  9. Se quiseres selecionar uma região de código mais específica para analisar, seleciona uma região na cronologia do CPU (deve ser uma região que mostre dados de perfilagem).

    Captura de tela que mostra as Ferramentas de Diagnóstico selecionando um segmento de tempo. DiagToolsSelectTimeSegment

    Captura de tela que mostra as Ferramentas de Diagnóstico selecionando um segmento de tempo. DiagToolsSelectTimeSegment

    Neste ponto, você pode começar a analisar os dados. Se você tiver problemas para coletar ou exibir dados, consulte Solucionar erros de criação de perfil e corrigir problemas.

    Dica

    Ao tentar identificar problemas de desempenho, faça várias medições. O desempenho varia naturalmente de execução para execução, e os caminhos de código normalmente são executados mais lentamente na primeira vez que são executados devido ao trabalho de inicialização única, como carregamento de DLLs, métodos de compilação JIT e inicialização de caches. Ao fazer várias medições, você tem uma ideia melhor do intervalo e da mediana da métrica que está sendo mostrada, o que permite comparar a primeira vez versus o desempenho em estado estacionário de uma área de código.

Etapa 2: Analisar dados de utilização da CPU

Recomendamos que você comece a analisar seus dados examinando a lista de funções em Uso da CPU, identificando as funções que estão fazendo mais trabalho e, em seguida, examinando mais de perto cada uma delas.

  1. Na lista de funções, examine as funções que estão fazendo mais trabalho.

    Captura de ecrã que mostra a Lista de Funções de Utilização da CPU das Ferramentas de Diagnóstico.

    Captura de ecrã que mostra a Lista de Funções de Utilização da CPU das Ferramentas de Diagnóstico.

    Dica

    As funções são listadas em ordem, começando com aquelas que fazem mais trabalho (não estão em ordem de chamada). Isso ajuda você a identificar rapidamente as funções de execução mais longa.

  2. Na lista de funções, clique duas vezes em uma das funções do seu aplicativo que está fazendo muito trabalho.

    Quando clicas duas vezes numa função, a vista Funções é aberta no painel esquerdo. Selecione a visualização Chamador/Chamado no menu suspenso.

    Captura de tela que mostra o modo de exibição Callee do chamador das Ferramentas de Diagnóstico.

    Neste modo de exibição, a função selecionada aparece no cabeçalho e na caixa Função atual (DoWork, neste exemplo). A função que chamou a função atual é mostrada à esquerda, sob Chamando Funções, e todas as funções chamadas pela função atual são mostradas na caixa de Funções Chamadas à direita. (Você pode selecionar qualquer uma das caixas para alterar a função atual.)

    Esta vista mostra-lhe o tempo total (ms) e a percentagem do tempo geral de execução da aplicação que a função demorou a concluir. do Corpo da Função também mostra a quantidade total de tempo (e a percentagem de tempo) gasto no corpo da função, excluindo o tempo gasto em chamadas e funções chamadas.

    Ao clicar duas vezes numa função, é aberta a visualização Caller/Callee no painel esquerdo.

    Captura de tela que mostra a visualização Caller Callee das Ferramentas de Diagnóstico.

    Nessa exibição, a função selecionada aparece no título e na caixa Função Atual (GetNumber, neste exemplo). A função que chamou a função atual é mostrada à esquerda em Chamando Funções, e todas as funções chamadas pela função atual são mostradas na caixa Chamando Funções à direita. (Você pode selecionar qualquer uma das caixas para alterar a função atual.)

    Esta vista mostra-lhe o tempo total (ms) e a percentagem do tempo geral de execução da aplicação que a função demorou a concluir. do Corpo da Função também mostra a quantidade total de tempo (e a porcentagem de tempo) gasto no corpo da função, excluindo o tempo gasto em chamadas de funções e funções chamadas. (Neste exemplo, 2367 de 2389 ms foram gastos no corpo da função, e os 22 ms restantes foram gastos em código externo chamado por esta função).

    Dica

    Valores altos no Corpo da Função podem indicar um gargalo de desempenho dentro da própria função.

  3. Para ver uma vista de nível superior que mostre a ordem em que as funções são chamadas, selecione Árvore de Chamadas na lista pendente na parte superior do painel.

    Cada área numerada na figura refere-se a uma etapa do procedimento.

    Árvore de chamadas das ferramentas de diagnóstico

    Imagem Descrição
    Passo 1 O nó de nível superior na árvore de chamadas de Uso da CPU, representando a aplicação.
    Passo 2 Na maioria das aplicações, quando a opção Mostrar Código Externo está desativada, o nó de segundo nível é um nó [Código Externo] que contém o código do sistema e da framework que executa e encerra a aplicação, desenha a interface do utilizador, controla o agendamento de threads e fornece outros serviços de baixo nível à aplicação.
    Passo 3 Os filhos do nó de segundo nível são os métodos de código de usuário e rotinas assíncronas que são chamados ou criados pelo sistema de segundo nível e código de estrutura.
    Passo 4 Os nós filhos de um método contêm dados somente para as chamadas do método pai. Quando Mostrar Código Externo está desativado, os métodos da aplicação também podem conter um nó [Código Externo].

    Aqui estão mais informações sobre os valores da coluna:

    • Total CPU indica quanto trabalho foi feito pela função e quaisquer funções chamadas por ela. Altos valores totais de CPU apontam para as funções que são mais caras em geral.

    • Self CPU indica quanto trabalho foi feito pelo código no corpo da função, excluindo o trabalho feito pelas funções que foram chamadas por ele. Valores de CPU Self podem indicar um gargalo de desempenho dentro da própria função.

    • Módulos O nome do módulo que contém a função ou o número de módulos que contêm as funções num nó [Código externo].

    Para ver as chamadas de função que usam a maior percentagem de uso da CPU na visualização da árvore de chamadas, clique em Expand Hot Path. O caminho quente pode ajudar a concentrar sua investigação na área que teria mais impacto.

    Captura de ecrã que mostra o Hot Path das Ferramentas de Diagnóstico.

    Observação

    Se vir código na árvore de chamadas marcado como código "defeituoso" ou "pilha inacessível", isso indica que os eventos de Rastreamento de Eventos para Windows (ETW) foram provavelmente descartados. Tente coletar o mesmo rastreamento uma segunda vez para resolver o problema.

  4. Para ver uma visualização diferente dos dados, selecione Flame Graph na lista suspensa na parte superior do painel.

    O gráfico de chama fornece uma visualização diferente da árvore de chamada que pode ajudá-lo a analisar os dados. Para obter mais informações, consulte Identificar caminhos quentes com um gráfico de chama.

Ver código externo

Código externo são funções em componentes do sistema e da estrutura que são executadas pelo código que você escreve. O código externo inclui funções que iniciam e param o aplicativo, desenham a interface do usuário, controlam threading e fornecem outros serviços de baixo nível para o aplicativo. Na maioria dos casos, você não estará interessado em código externo e, portanto, a ferramenta Uso da CPU reúne as funções externas de um método de usuário em um nó [Chamada Externa].

Se pretender exibir os caminhos de chamada do código externo, desmarque Mostrar Apenas Meu Código na lista de Configurações e escolha Aplicar.

Captura de ecrã que mostra Definições e, em seguida, Mostrar Apenas o Meu Código.

Código externo são funções em componentes do sistema e da estrutura que são executadas pelo código que você escreve. O código externo inclui funções que iniciam e param o aplicativo, desenham a interface do usuário, controlam threading e fornecem outros serviços de baixo nível para o aplicativo. Na maioria das vezes, não estarás interessado em código externo e, portanto, a ferramenta de utilização da CPU reúne as funções externas de um método do utilizador num nó [Código Externo].

Se você quiser exibir os caminhos de chamada do código externo, escolha Mostrar de Código Externo na lista modo de exibição Filtro de e, em seguida, escolha Aplicar.

Captura de ecrã que mostra Escolher Vista de Filtro e, em seguida, Mostrar Código Externo.

Tenha em mente que muitas cadeias de chamadas de código externas estão profundamente aninhadas, assim a largura da coluna Nome da Função pode exceder a largura de todos os monitores de computador, exceto dos maiores. Quando isso acontece, os nomes das funções são mostrados como [...].

Use a caixa de pesquisa para encontrar um nó que você está procurando e, em seguida, use a barra de rolagem horizontal para exibir os dados.

Dica

Se você criar um perfil de código externo que chama funções do Windows, certifique-se de que você tem o mais atual .arquivos de pdb. Sem esses arquivos, suas exibições de relatório listarão nomes de funções do Windows que são enigmáticos e difíceis de entender. Para obter mais informações sobre como garantir que você tenha os arquivos necessários, consulte Especificar símbolo (.pdb) e arquivos de origem no depurador.

Próximos passos

Neste tutorial, você aprendeu como coletar e analisar dados de uso da CPU. Se já concluíste o tour de do analisador de desempenho, é aconselhável realizar um tutorial que mostra como utilizar as ferramentas de forma mais eficaz.

Neste tutorial, você aprendeu como coletar e analisar dados de uso da CPU durante a depuração. Pode querer saber mais sobre a criação do perfil de compilações de lançamento usando o Performance Profiler.