Ler em inglês

Compartilhar via


Analisar o desempenho usando a criação de perfil de CPU no Criador de Perfil de Desempenho (C#, Visual Basic, C++, F#)

Uma boa maneira de começar a investigar problemas de desempenho no seu aplicativo é entender a utilização de CPU usando uma ferramenta de perfil de CPU. A ferramenta de desempenho Uso da CPU do Visual Studio mostra o tempo de computação ativo da CPU e o percentual gasto executando o código em C++, C#/Visual Basic.

A ferramenta Uso da CPU pode ajudar você a:

  • Diagnosticar uma lentidão ou um travamento de processo na base de código da sua equipe. A ferramenta pode ajudar você a diagnosticar o problema com o código de produção da sua equipe. Além disso, fornece insights automáticos e várias exibições de seus dados para que você possa analisar e diagnosticar problemas de desempenho.

  • Identificar problemas de desempenho em cenários de DevOps Por exemplo, a ferramenta pode ajudar quando um cliente relata que algumas solicitações ou pedidos não estão chegando ao site de varejo durante a alta temporada. Muitas vezes, os problemas estão na produção e é desafiador depurar naquele momento, mas essa ferramenta pode ajudar você a capturar informações e evidências suficientes do problema. Depois de coletar um arquivo de rastreamento, a análise pode ajudar você rapidamente a entender possíveis causas e fornecer sugestões dentro do contexto do código para que você possa executar as próximas etapas para corrigir o problema.

  • Verifique se há alta utilização da CPU Se o problema de latência não estiver dentro de uma solicitação de API, você poderá verificar se há alta utilização da CPU e outros problemas relacionados com a ferramenta Uso da CPU. A ferramenta Uso da CPU pode ajudar a identificar gargalos para que você possa restringir onde otimizar.

A ferramenta Uso da CPU é útil para as sessões de rastreamento locais e para a produção. Você pode executar a ferramenta Uso da CPU usando o atalho de teclado, Alt+F2, e, em seguida, escolher Uso da CPU, ou abrir um rastreamento já coletado usando uma ferramenta como dotnet-trace ou dotnet-monitor. (Para o código de produção .NET, é mais provável que você colete rastreamentos.)

Você pode executar a ferramenta Uso da CPU em um projeto aberto do Visual Studio, em um aplicativo instalado da Microsoft Store ou anexada a um aplicativo ou a um processo em execução. Você pode executar a ferramenta de uso da CPU em builds de versão ou depuração. Para obter mais informações, confira Executar ferramentas de criação de perfil em builds de versão ou de depuração.

As instruções a seguir mostram como usar a ferramenta de uso da CPU sem o depurador, usando o Analisador de Desempenho do Visual Studio. Os exemplos usam um build de versão em um computador local. Builds de versão fornecem a melhor exibição do desempenho real do aplicativo. Para obter um tutorial que mostre como melhorar o desempenho usando a ferramenta Uso da CPU, consulte Estudo de caso: guia para iniciantes para otimizar o código.

Geralmente, o computador local replica melhor a execução do aplicativo instalado. Para coletar dados de um dispositivo remoto, execute o aplicativo diretamente no dispositivo, não por meio de uma Conexão de Área de Trabalho Remota.

Coletar dados de utilização da CPU

  1. No projeto do Visual Studio, defina a configuração da solução para versão e selecione Local Windows Debugger (ou Máquina Local ) como o destino da implantação.

    Captura de tela que mostra Selecionar Versão e Computador Local.

    Captura de tela que mostra Selecionar Versão e Computador Local.

  2. Selecione Depurar>Criador de Perfil de Desempenho.

  3. Em Ferramentas disponíveis, selecione Uso da CPU e, em seguida, selecione Iniciar.

    Captura de tela que mostra Selecionar Uso da CPU.

    Captura de tela que mostra Selecionar Uso da CPU.

    Se você habilitar a opção Iniciar com a coleção pausada antes de iniciar o criador de perfil, os dados não serão coletados até que você selecione o botão Gravar no modo de exibição de sessão de diagnóstico.

    Observação

    Para obter mais informações sobre como tornar a ferramenta mais eficiente, confira o artigo Otimizando as configurações do Criador de Perfil.

  4. Depois que o aplicativo é iniciado, a sessão de diagnóstico começa e exibe os dados de utilização da CPU. Quando tiver terminado de coletar os dados, selecione Interromper Coleta.

    Captura de tela que mostra Parar coleta de dados do Uso da CPU.

    Captura de tela que mostra Parar coleta de dados do Uso da CPU.

    A ferramenta Uso da CPU analisa os dados e exibe o relatório. Se você tiver problemas para coletar ou exibir dados, consulte Solucionar erros de perfil e corrigir falhas.

    Captura de tela que mostra o relatório de Uso da CPU.

    Captura de tela que mostra o relatório de Uso da CPU.

    Use o menu suspenso Filtrar para marcar ou desmarcar os threads a serem exibidos e use a caixa Pesquisar para procurar um thread ou um nó específico.

Colunas de dados de utilização da CPU

Nome Descrição
CPU total [unidade, %] Equação de dados de % total

Os milissegundos do otempo de computação da CPU e o percentual da CPU usados por chamadas à função e as funções chamadas por ela, no intervalo de tempo selecionado. Isso é diferente do grafo de linha de tempo Uso da CPU, que compara a atividade total da CPU em um intervalo de tempo com a CPU total disponível.
Próprio CPU [unidade, %] Equação % própria

Os milissegundos do tempo de computação da CPU e o percentual da CPU usados por chamadas à função no intervalo de tempo selecionado, excluindo funções chamadas pela função.
Módulo Em alguns modos de exibição, a coluna Módulo é mostrada, a qual mostra o nome do módulo que contém a função.

Analisar insights da CPU

Se os insights aparecerem na seção Top Insights, use o link fornecido para obter mais informações sobre o problema identificado. Além disso, se você estiver usando o Copilot, o botão Perguntar ao Copilot abrirá a janela de chat, onde o Copilot fornecerá sugestões com base no seu código e nos problemas identificados.

Para obter mais informações, confira Insights da CPU.

Analisar a utilização da CPU

Para analisar o relatório de Uso da CPU, clique em Abrir detalhes ou clique em uma das principais funções para abrir o modo de exibição Funções.

O relatório fornece diferentes exibições dos dados de diagnóstico:

Visualizar Descrição
Chamador/Computador chamado Exibição detalhada do tempo de CPU para uma função específica, as funções que a chamaram e as funções que ela chama. Os dados de desempenho são agregados para o período de coleta de dados. Você pode selecionar funções de chamada e funções chamadas para percorrer o caminho da chamada.
Árvore de chamadas Exibição hierárquica do caminho de chamada de função. Usado para identificar caminhos de chamada que estão tomando mais tempo de CPU (caminho quente).
Módulos Exibição do tempo de CPU gasto em módulos individuais, agregados durante o período de coleta de dados. Usado para identificar módulos que podem ser gargalos de desempenho devido a uma combinação de altas contagens de chamadas e/ou problemas de desempenho.
Funções Exibição do tempo de CPU gasto em funções individuais, agregadas durante o período de coleta de dados. Usado para identificar funções que podem ser gargalos de desempenho devido a uma combinação de altas contagens de chamadas e/ou problemas de desempenho.
Flame Graph Exibição hierárquica do caminho de chamada de função em uma visualização do Flame Graph. Usado para identificar caminhos de chamada que estão tomando mais tempo de CPU (caminho quente).

Para analisar o relatório, clique em Criar relatório detalhado.

O relatório fornece diferentes exibições dos dados de diagnóstico:

  • Chamador/Computador chamado
  • Árvore de chamadas

Em todos os modos de exibição, exceto Chamador/Computador chamado, o relatório de diagnóstico é classificado pela CPU Total, da mais alta para a mais baixa. Altere a ordem de classificação ou a coluna de classificação selecionando os cabeçalhos de coluna. Você pode clicar duas vezes em uma função na qual está interessado e verá o código fonte da função, bem como um destaque que mostra onde o tempo é gasto nessa função. A tabela mostra colunas contendo dados como o tempo gasto na função, incluindo as funções chamadas (CPU Total), e uma segunda coluna que mostra o tempo gasto em uma função, excluindo as funções chamadas (CPU Próprio).

Esses dados podem ajudar a avaliar se a própria função é um gargalo de desempenho. Determine quantos dados o método está exibindo para ver se o código de terceiros ou as bibliotecas de runtime são o motivo para seus pontos de extremidade estarem lentos ou pesados no consumo de recursos.

Para obter mais informações sobre como usar o Gráfico de Chamas, consulte Identificar caminhos quentes com o Gráfico de Chamas.

Árvore de chamadas de Uso da CPU

Para exibir a árvore de chamadas, selecione o nó pai no relatório. Por padrão, a página Uso da CPU é aberta no modo de exibição Chamador/Computador chamado. Na lista suspensa Exibição Atual, selecione Árvore de Chamadas.

Você pode clicar nos botões Expandir Caminho crítico e Mostrar Caminho crítico para ver as chamadas de função que usam a porcentagem mais alta da CPU no modo de exibição de árvore de chamadas.

Estrutura da árvore de chamadas

Captura de tela que mostra a estrutura da árvore de chamadas.

Captura de tela que mostra a estrutura da árvore de chamadas.

Imagem Descrição
Etapa 1 O nó de nível superior na árvore de chamadas de uso da CPU, representando o aplicativo.
Etapa 2 Na maioria dos aplicativos, quando a opção Mostrar Código Externo está desabilitada, o nó de segundo nível é um [Código Externo]. O nó contém o código do sistema e da estrutura que inicia e interrompe o aplicativo, elabora a interface do usuário, controla o agendamento de threads e fornece ao aplicativo outros serviços de nível baixo.
Etapa 3 Os filhos do nó de segundo nível são métodos e rotinas assíncronas do código de usuário que são chamados ou criados pelo sistema de segundo nível e código do framework.
Etapa 4 Os nós filhos de um método só têm dados das chamadas do método pai. Quando Mostrar Código Externo é desabilitado, os métodos de aplicativo também podem conter um nó [Código Externo].

Código externo

As funções do sistema e do framework executadas pelo seu código são chamadas código externo. As funções do código externo iniciam e interrompem o aplicativo, elaboram a interface do usuário, controlam o threading e fornecem ao aplicativo outros serviços de nível inferior. Na maioria das vezes, você não está interessado em código externo, portanto, a árvore de chamadas de uso da CPU reúne as funções externas de um método do usuário em um único nó [Chamada Externa].

Para exibir os caminhos de chamada do código externo, na página de resumo do relatório principal (painel direito), desmarque Mostrar Apenas Meu Código no menu suspenso Configurações e selecione Aplicar. (O menu suspenso Configurações está disponível na página de resumo do relatório principal, não nas exibições detalhadas.)

captura de tela que mostra Configurações, em seguida, Mostrar Apenas Meu Código.

As funções do sistema e do framework executadas pelo seu código são chamadas código externo. As funções do código externo iniciam e interrompem o aplicativo, elaboram a interface do usuário, controlam o threading e fornecem ao aplicativo outros serviços de nível inferior. Na maioria das vezes, você não está interessado em código externo, portanto, a árvore de chamadas de uso da CPU reúne as funções externas de um método de usuário em um único nó [Código Externo].

Para exibir os caminhos de chamada do código externo, na página principal do relatório de diagnóstico (painel direito), selecione Mostrar Código Externo na lista suspensa Filtrar e, em seguida, selecione Aplicar. O modo de exibição de Árvore de Chamadas da página Uso da CPU expande as chamadas de código externo. (A lista suspensa Filtrar está disponível na página principal do diagnóstico, não nas exibições detalhadas.)

captura de tela que mostra Mostrar Código Externo.

Quando você desabilita Mostrar Apenas Meu Código, a exibição Árvore de Chamadas na página Uso da CPU expande as chamadas de código externas.

Muitas cadeias de chamadas de código externo são muito aninhadas; portanto, a largura da cadeia pode exceder a largura de exibição da coluna Nome da Função. Em seguida, os nomes de função aparecem conforme mostrado na imagem a seguir.

Captura de tela que mostra o código externo aninhado na árvore de chamadas.

Muitas cadeias de chamadas de código externo são muito aninhadas; portanto, a largura da cadeia pode exceder a largura de exibição da coluna Nome da Função. Os nomes de função são exibidos como ....

Captura de tela que mostra o código externo aninhado na árvore de chamadas.

Para localizar um nome de função que você está procurando, use a caixa de pesquisa. Passe o mouse sobre a linha selecionada ou use a barra de rolagem horizontal para exibir os dados.

Captura de tela que mostra a busca por código externo aninhado.

Captura de tela que mostra a busca por código externo aninhado.

Funções assíncronas na árvore de chamadas do Uso da CPU

Quando o compilador encontra um método assíncrono, ele cria uma classe oculta para controlar a execução do método. Conceitualmente, a classe é uma máquina de estado. A classe tem funções geradas por compilador que chamam os métodos originais de maneira assíncrona e os retornos de chamada, agendadores e iteradores necessários para executá-los. Quando um método pai chama o método original, o compilador remove o método do contexto de execução do pai e executa os métodos de classe ocultos no contexto do código do sistema e da estrutura que controla a execução do aplicativo. Os métodos assíncronos são geralmente, mas nem sempre, executados em uma ou mais segmentos diferentes. Esse código é exibido na árvore de chamadas Uso da CPU como filhos do nó [Código Externo] imediatamente embaixo do nó superior da árvore.

No exemplo a seguir, os primeiros dois nós em [Código Externo] são os métodos gerados por compilador da classe da máquina de estado. O terceiro nó é a chamada ao método original.

Captura de tela que mostra o nó Assíncrono.

Expanda os métodos gerados para mostrar o que está acontecendo:

Captura de tela que mostra o nó assíncrono expandido.

Captura de tela que mostra o nó assíncrono expandido.

  • MainPage::GetMaxNumberAsyncButton_Click apenas gerencia uma lista de valores da tarefa, calcula o máximo de resultados e exibe a saída.

  • MainPage+<GetMaxNumberAsyncButton_Click>d__3::MoveNext mostra a atividade necessária para agendar e iniciar as 48 tarefas que encapsulam a chamada para GetNumberAsync.

  • MainPage::<GetNumberAsync>b__b mostra a atividade das tarefas que chamam GetNumber.

Coletar contagens de chamadas (.NET)

Para visualizar as contagens de chamadas na exibição Funções, ative a configuração antes de iniciar o criador de perfil. Essa configuração tem suporte para tipos de projetos do .NET e requer o lançamento do processo sob a ferramenta de análise de desempenho. O cenário de anexação não é compatível.

  1. Selecione o ícone Configurações para Uso da CPU no Criador de Perfil de Desempenho.

    Captura de tela que mostra o ícone de configurações para uso da CPU.

  2. Habilite a opção Coletar contagens de chamadas (somente .NET).

    Captura de tela que mostra as configurações de uso da CPU.

  3. Coletar dados de uso da CPU.

  4. Abra a vista Funções e verifique se a coluna Contagem de Chamadas está definida como visível.

    Se você não vir a coluna, clique com o botão direito do mouse em um título de coluna para escolher colunas visíveis.

    Uma captura de tela que mostra dados de contagem de chamadas. Configurações de