Partilhar via


Analise o desempenho usando a criação de perfil da CPU no Performance Profiler (C#, Visual Basic, C++, F#)

Uma boa maneira de começar a investigar problemas de desempenho na sua aplicação é entender a utilização da CPU usando uma ferramenta de análise de CPU. A ferramenta de análise de desempenho do Visual Studio para uso da CPU mostra o tempo ativo de computação da CPU e a percentagem de tempo gasta na execução de código em C++, C#/Visual Basic.

A ferramenta Uso da CPU pode ajudá-lo a:

  • Diagnostique uma lentidão ou um bloqueio de processo na base de código da sua equipe. A ferramenta pode ajudá-lo a diagnosticar o problema com o código de produção da sua equipe. Ele fornece insights automáticos e várias visualizaçõ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 em produção e é complicado fazer a depuração nesse momento, mas esta ferramenta pode ajudar a recolher informações e evidências suficientes sobre o problema. Depois de coletar um arquivo de rastreamento, a análise pode rapidamente ajudá-lo a entender possíveis causas e dar sugestões dentro do contexto do seu 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 ajudá-lo a identificar gargalos para que você possa restringir onde otimizar.

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

Você pode executar a ferramenta Uso da CPU em um projeto aberto do Visual Studio, em um aplicativo da Microsoft Store instalado ou anexado a um aplicativo ou processo em execução. Você pode executar a ferramenta Uso da CPU em compilações de lançamento ou depuração. Para obter mais informações, consulte Executar ferramentas de análise de desempenho em compilações de lançamento ou depuração.

As instruções a seguir mostram como usar a ferramenta de uso da CPU sem o depurador, usando o Visual Studio Performance Profiler. Os exemplos usam uma compilação Release em uma máquina local. As compilações de versão fornecem a melhor visualização do desempenho real do aplicativo. Para obter um tutorial que mostra como melhorar o desempenho usando a ferramenta Uso da CPU, consulte Estudo de caso: Guia para iniciantes para otimizar o código.

Normalmente, a máquina local replica melhor a execução do aplicativo instalado. Para coletar dados de um dispositivo remoto, execute o aplicativo diretamente no dispositivo, não em 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 como Release e selecione o destino de implantação.

    O destino de implantação normalmente corresponde ao nome do projeto, indicando uma implantação local.

    Captura de tela que mostra Select Release e Local Machine.

  2. Selecione Debug>Performance Profiler.

  3. Em Ferramentas disponíveis, selecione Utilização da CPUe, em seguida, selecione Iniciar.

    Captura de tela que mostra Uso da CPU.

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

    Observação

    Para alguns tipos de projeto, como CMake, você deve definir o destino de inicialização como Executável. Para obter mais informações, consulte Quais ferramentas são suportadas para meu projeto?. Para obter mais informações sobre como tornar a ferramenta mais eficiente, consulte Otimizando as configurações do Profiler.

  4. Depois que o aplicativo é iniciado, a sessão de diagnóstico começa e exibe dados de utilização da CPU. Quando terminar de coletar dados, selecione Parar coleta.

    Captura de tela que mostra a suspensão da coleta de dados de 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 criação de perfil e corrigir problemas.

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

    Use o menu suspenso Filtro para selecionar ou desmarcar tópicos a serem exibidos e use a caixa de Pesquisa para procurar um tópico ou nó específico.

Colunas de dados de utilização da CPU

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

Os milissegundos de tempo de computação da CPU e a porcentagem da CPU usada por chamadas para a função, e funções chamadas pela função, no intervalo de tempo selecionado. Isso é diferente do gráfico de linha do tempo da Utilização da CPU , que compara a atividade total da CPU num intervalo de tempo com o total de CPU disponível.
Self CPU [unidade, %] Equação de Self %

Os milissegundos de tempo de cálculo da CPU e a percentagem de CPU utilizada pelas chamadas para a função no intervalo de tempo selecionado, excluindo as funções chamadas pela função.
Módulo Em alguns modos de exibição, a coluna Módulo é mostrada, que mostra o nome do módulo que contém a função.

Analise as informações da CPU

Se aparecerem informações na secçã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 Ask Copilot abrirá a janela de bate-papo do Copilot e o Copilot fornecerá sugestões com base no seu código e em quaisquer problemas identificados.

Para obter mais informações, consulte perceções sobre a CPU.

Analise a utilização da CPU

Para uma análise aprofundada do relatório de Utilização de CPU, abra primeiro uma das vistas detalhadas do relatório:

  1. Clique em Abrir detalhes na página de resumo do relatório ou selecione uma das funções principais para abrir a visualização Funções .

    Captura de tela que mostra o link Abrir detalhes.

  2. Na lista Modo de Exibição Atual , você pode selecionar uma das exibições de relatório detalhadas.

    Captura de tela que mostra a lista de relatórios detalhados.

A tabela a seguir fornece uma descrição das exibições detalhadas.

Visualizar Descrição
Remetente/destinatário Vista detalhada do tempo da CPU para uma função específica, as funções que a invocaram e as funções que ela invoca. Os dados de desempenho são agregados para o período de recolha de dados. Você pode selecionar funções de chamada e funções chamadas para percorrer o caminho da chamada.
Árvore de chamadas Vista hierárquica da trajectória de chamada de função. Usado para identificar caminhos de chamada que estão ocupando mais tempo da CPU (caminho quente).
Módulos Vista do tempo de CPU gasto em módulos individuais, agregado ao longo do período de recolha 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 Vista do tempo da CPU gasto em funções individuais, agregado ao longo do período de recolha 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.
Gráfico de chama Vista hierárquica do caminho de chamadas de funções numa visualização de gráfico de chama. Usado para identificar caminhos de chamada que estão ocupando mais tempo da CPU (caminho quente).

Em todas as visualizações, exceto Caller/callee, o relatório de diagnóstico é classificado por Total de CPU, da mais alta para a mais baixa. Altere a ordem de classificação ou a coluna de classificação selecionando os cabeçalhos das colunas. Você pode clicar duas vezes numa função em que você 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 com dados como o tempo gasto na função, incluindo funções chamadas (Total CPU), e uma segunda coluna que mostra o tempo gasto em uma função, excluindo funções chamadas (Self CPU).

Esses dados podem ajudá-lo a avaliar se a função em si é um gargalo de desempenho. Determine a quantidade de dados que o método está exibindo para ver se o código de terceiros ou as bibliotecas de tempo de execução são a razão para seus pontos de extremidade serem lentos ou consumirem muitos recursos.

Para obter mais informações sobre como usar o gráfico Flame, consulte Identificar caminhos quentes com o Flame Graph.

Á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 para a visualização Caller/Callee. Na lista suspensa Vista Atual, selecione Árvore de chamadas.

Você pode clicar nos botões Expandir Hot Path e Mostrar Hot Path para ver as chamadas de função que usam a maior porcentagem da CPU na visualização da árvore de chamadas.

Estrutura da árvore de chamadas

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

Imagem Descrição
Passo 1 O nó de nível superior na árvore de chamadas de Uso da CPU, representando o aplicativo.
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]. O nó contém o código do sistema e do framework que inicia e para a aplicação, desenha a interface, 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 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 têm dados apenas para as chamadas do método pai. Quando Mostrar Código Externo está desativado, os métodos do aplicativo também podem conter um nó [Código Externo].

Para obter ajuda para entender dados inesperados na árvore de chamadas, consulte Noções básicas sobre a árvore de chamadas.

Código externo

As funções do sistema e da estrutura que são executadas pelo seu código são chamadas código externo. As funções de código externo iniciam e param o aplicativo, desenham a interface do usuário, controlam o threading e fornecem outros serviços de baixo nível para o aplicativo. Na maioria das vezes, o utilizador não está interessado no código externo, então a árvore de chamadas de Uso da CPU reúne as funções externas de um método de usuário em um nó [Chamada Externa].

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

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

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

Muitas cadeias de chamadas de código externas são profundamente aninhadas, de modo que a largura da cadeia pode exceder a largura de exibição da coluna Nome da Função. Os nomes das funções aparecem como mostrado na imagem a seguir.

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

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

Captura de ecrã que mostra Pesquisa de código externo aninhado.

Funções assíncronas na árvore de chamadas de 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 possui funções geradas pelo compilador que chamam de forma assíncrona os métodos originais, juntamente com os callbacks, o agendador e os iteradores necessários para a sua execução. 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 frequentemente, mas nem sempre, executados em um ou mais threads diferentes. Esse código aparece na árvore de chamadas Uso da CPU como filhos do nó [Código Externo] imediatamente abaixo do nó superior da árvore.

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

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

Analisar o desempenho em múltiplos processos

A partir do Visual Studio 2022 versão 17.13, pode analisar dados multiprocesso na ferramenta CPU Usage. Isto facilita a análise do desempenho para aplicações multiprocesso como o .NET Aspire. Estas funcionalidades permitem-lhe distinguir e analisar a utilização da CPU entre processos numa única sessão, o que proporciona perspetivas mais claras sobre o consumo de recursos.

Precisa de recolher os dados de múltiplos processos antes de poder analisá-los. Para recolher os dados, selecione Recolher dados de múltiplos processos para a ferramenta de Utilização de CPU no Performance Profiler.

Captura de ecrã que mostra a seleção de dados multiprocesso.

O gráfico da linha temporal que mostra o uso da CPU da sua aplicação apresenta dados de desempenho com códigos de cores distintos para cada processo. Os gráficos são exibidos como gráficos de área empilhada.

Captura de ecrã que mostra dados multiprocesso na linha temporal.

Você pode filtrar processos usando um menu suspenso no canto superior esquerdo do gráfico de linha temporal da CPU. Quando seleciona ou desmarca um processo, a página de resumo do perfilador e os relatórios detalhados são atualizados com base na(s) nova(s) seleção(s), permitindo uma análise mais precisa.

Captura de ecrã que mostra filtro multiprocesso.

Coletar contagens de chamadas (.NET)

Se quiser ver as contagens de chamadas na vista Funções, pode ativar a definição antes de iniciar a ferramenta de perfil. Essa configuração é suportada para tipos de projeto .NET e requer a inicialização do processo sob o analisador. O cenário de anexação não é suportado.

  1. Selecione o ícone Configurações para Uso da CPU no Performance Profiler.

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

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

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

  3. Colete dados de uso da CPU.

  4. Abra a visualização de Funções e, em seguida, certifique-se de que a coluna Contagem de Chamadas está definida como visível.

    Se não vir a coluna, clique com o botão direito do rato no cabeçalho de uma coluna para escolher colunas visíveis.

    Captura de tela que mostra os dados da contagem de chamadas.