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 de uso da CPU integrada ao depurador. Você também pode analisar o uso da CPU sem um depurador anexado ou visando um aplicativo em execução. Para obter mais informações, consulte Executar ferramentas de criação de perfil em compilações de lançamento ou depuração e Analisar o desempenho usando a criação de perfil de CPU.

Quando o depurador pausa, a ferramenta de 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++. O de carga de trabalho do Visual Studio correspondente é necessário. Windows 8 e versões posteriores são necessários para executar ferramentas de perfil com o depurador (na janela de 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 Uso da CPU, 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, a vista Resumo das Ferramentas de Diagnóstico aparece. Se precisar abrir a janela, clique em Depurar>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 sobre Uso da CPU e 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 visualizar esses dados recolhidos quando a sua aplicação está parada num ponto de interrupção.

  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 no separador Uso da CPU.

    Captura de ecrã 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 pretender selecionar uma região específica do código para analisar, selecione uma região na cronologia da 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 tiveres problemas para recolher ou apresentar dados, consulta Resolver erros de perfilagem 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.

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

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

    Nesta exibição, a função selecionada aparece no título e na caixa Função atual (DoWork, neste exemplo). A função que chamou a função atual é mostrada à esquerda na seção Funções Chamadas, e todas as funções chamadas pela função atual são mostradas na caixa 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 porcentagem de tempo) gasto no corpo da função, excluindo o tempo gasto em funções de chamada e chamadas de funções.

    Quando se clica duas vezes numa função, a vista Caller/Callee abre-se no painel esquerdo.

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

    Nessa visã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 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 porcentagem de tempo) gasto no corpo da função, excluindo o tempo gasto em chamadas e chamadas funções. (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 inicia e para a aplicação, desenha a interface do utilizador, controla o agendamento de threads e fornece outros serviços de baixo nível para a aplicação.
    Passo 3 Os filhos do nó de segundo nível são os métodos de código do utilizador e as rotinas assíncronas que são chamadas ou criadas pelo código do sistema e do framework de segundo nível.
    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 autônoma 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 utilizam a maior percentagem de CPU na vista da árvore de chamadas, clique em Expandir 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 você vir o código na árvore de chamadas marcada como código "quebrado" ou "pilha intransitável", isso indica que os eventos de Rastreamento de Eventos para Windows (ETW) provavelmente foram descartados. Tente coletar o mesmo rastreamento uma segunda vez para resolver o problema.

  4. Para ver uma exibição diferente dos dados, selecione Flame Graph na lista de opções 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 quiser visualizar os caminhos de chamada do código externo, desmarque Mostrar Apenas o Meu Código na lista de Configurações e depois 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, o utilizador não estará interessado em código externo, e, portanto, a ferramenta de utilização da CPU reúne as funções externas de um método de utilizador num nó [Código Externo].

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

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

Lembre-se de que muitas cadeias de chamadas de código externas estão profundamente aninhadas, de modo que a largura da coluna Nome da Função pode exceder a largura de exibição de todos, exceto o maior dos monitores de computador. 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á concluiu o tour de dodo analisador de desempenho, talvez queira fazer um tutorial que demonstre como usar as ferramentas de forma mais eficaz.

Neste tutorial, aprendeste a recolher e analisar dados de utilização da CPU enquanto fazias a depuração. Você pode querer saber mais sobre como analisar builds de lançamento usando o Performance Profiler.