Primeiro, examine as ferramentas de criação de perfil (C#, Visual Basic, C++, F#)
As ferramentas de medição de desempenho do aplicativo são essenciais para desenvolvedores que desejam otimizar o código e melhorar o desempenho do aplicativo. O Visual Studio oferece uma variedade de ferramentas de criação de perfil e diagnóstico que podem ajudar você a diagnosticar o uso de memória e de CPU e outros problemas no nível do aplicativo. Com essas ferramentas, você pode acumular dados de desempenho enquanto executa o aplicativo. Um criador de perfil pode ajudá-lo a tomar decisões informadas rapidamente fornecendo uma representação visual dos tempos de execução e do uso da CPU para seu aplicativo. Neste artigo, vamos dar uma olhada rápida nas ferramentas de criação de perfil mais comuns.
Para obter ajuda com a escolha da ferramenta correta ou para ver o suporte à ferramenta de criação de perfil para diferentes tipos de aplicativos, consulte Qual ferramenta devo usar? Para obter um tutorial que mostra uma abordagem geral para otimizar o código usando as ferramentas de criação de perfil, consulte Estudo de caso: Guia para iniciantes sobre como otimizar o código.
Medir o desempenho em builds de versão
As ferramentas no Performance Profiler servem para fornecer análise para builds de versão. No Performance Profiler, é possível coletar informações de diagnóstico durante a execução do aplicativo e, em seguida, examinar as informações coletadas após a interrupção do aplicativo (uma análise post-mortem).
Abra o Performance Profiler escolhendo Depurar>Performance Profiler (ou Alt + F2).
Para saber mais sobre como usar a ferramenta de uso de memória ou uso de CPU no Performance Profiler versus as ferramentas integradas ao depurador, confira Executar ferramentas de criação de perfil com ou sem o depurador.
As ferramentas disponíveis no Performance Profiler incluem:
- Uso da CPU
- Alocação de objeto .NET
- Uso de memória
- Instrumentação
- Ferramenta .NET Async
- E/S do arquivo
- Contadores do .NET
- Ferramenta de banco de dados
- Uso de GPU
Para ver o suporte à ferramentas de criação de perfil para tipos diferentes de aplicativo, confira Qual ferramenta devo usar?.
Em alguns cenários, a janela permite que você selecione várias ferramentas de criação de perfil. Ferramentas como Uso da CPU podem fornecer dados complementares que podem ser usados para ajudar na análise. Você também pode usar o criador de perfil de linha de comando para habilitar cenários que envolvem várias ferramentas de criação de perfil.
Medir o desempenho durante a depuração
As ferramentas de criação de perfil que podem ser acessadas durante uma sessão de depuração estão disponíveis na janela Ferramentas de Diagnóstico. A janela Ferramentas de Diagnóstico é exibida automaticamente, a menos que tenha sido desativada. Para abrir a janela, clique em Depurar/Windows/Mostrar Ferramentas de Diagnóstico (ou pressione Ctrl + Alt + F2). Com a janela aberta, é possível selecionar ferramentas para as quais você deseja coletar dados.
Durante a depuração, é possível usar a janela Ferramentas de Diagnóstico para analisar o uso da CPU, memória e contadores do .NET, e exibir os eventos que mostram informações relacionadas ao desempenho.
Durante a depuração, é possível usar a janela Ferramentas de Diagnóstico para analisar o uso da CPU e de memória e exibir os eventos que mostram informações relacionadas ao desempenho.
A janela Ferramentas de Diagnóstico é uma maneira comum de criar perfis de aplicativos, mas para builds de Versão também é possível fazer uma análise post-mortem do aplicativo. Para saber mais sobre as diferentes abordagens, confira Executar ferramentas de criação de perfil com ou sem o depurador. Para ver o suporte à ferramentas de criação de perfil para tipos diferentes de aplicativo, confira Qual ferramenta devo usar?.
As ferramentas disponíveis na janela Ferramentas de Diagnóstico ou durante uma sessão de depuração incluem:
Dica
Usar o relançamento para ignorar a página de inicialização e executar automaticamente com as configurações anteriores pressionando Alt+F2 ou clicando em Depurar > Performance Profiler.
Observação
O Windows 8 ou posterior é necessário para executar ferramentas de criação de perfil com o depurador (janela Ferramentas de Diagnóstico).
Analisar o uso de CPU
A ferramenta Uso da CPU é um bom lugar para começar a analisar o desempenho do aplicativo. Ela informará mais sobre os recursos de CPU que o aplicativo está consumindo. Você pode usar a ferramenta de Uso da CPU integrada ao depurador ou a ferramenta uso da CPU pós-mortem.
Ao usar a ferramenta de Uso da CPU integrada ao depurador, abra a janela Ferramenta de Diagnóstico (se ela estiver fechada, escolha Depurar/Windows/Mostrar Ferramentas de Diagnóstico). Durante a depuração, abra a exibição Resumo e selecione Registrar Perfil de CPU.
Uma forma de usar a ferramenta é definir dois pontos de interrupção no código: um no início e outro no final da função ou na região de código que você deseja analisar. Examine os dados de criação de perfil quando eles estiverem em pausa no segundo ponto de interrupção.
A exibição Uso da CPU mostra uma lista de funções ordenadas pela execução mais longa, com a função de execução mais longa na parte superior sob Principais Funções. A seção Caminho Crítico mostra a pilha de chamadas para as funções que estão usando mais CPU. Essas listas podem ajudar a levar você para funções em que estão ocorrendo gargalos de desempenho.
A exibição Uso da CPU mostra uma lista de funções ordenadas pela execução mais longa, com a função de execução mais longa na parte superior. Isso pode ajudar a levá-lo para as funções em que estão ocorrendo gargalos de desempenho.
Clique em uma função na qual você está interessado e verá uma exibição de Árvore de chamadas mais detalhada, com a função selecionada realçada. A tabela mostra colunas com dados como o tempo gasto na função, incluindo funções chamadas (CPU total) e uma segunda coluna que mostra o tempo gasto em uma função, excluindo as funções chamadas (Auto CPU). Esses dados podem ajudá-lo a avaliar se a própria função é um gargalo de desempenho.
Dica
O criador de perfil do Visual Studio dá suporte à coleta e à exibição de rastreamentos. O criador de perfil também pode exibir rastreamentos que foram coletados anteriormente por outras ferramentas, como dotnet-trace. O dotnet-trace produz resultados de amostragem, não um rastreamento instrumentado. Para saber mais, confira dotnet-trace.
Clique em uma função de interesse e você verá uma exibição "borboleta" de três painéis mais detalhada, com a função selecionada no centro da janela, a função de chamada à esquerda e as funções chamadas à direita. A seção Corpo da função também mostra o tempo total (e o percentual de tempo) gasto no corpo da função, excluindo o tempo gasto nas funções de chamada e nas funções chamadas. Esses dados podem ajudá-lo a avaliar se a própria função é um gargalo de desempenho.
Analisar o uso de memória
A janela Ferramentas de Diagnóstico também permite avaliar o uso de memória em seu aplicativo usando a ferramenta Uso de Memória. Por exemplo, é possível examinar o número e tamanho dos objetos no heap. Você pode usar a ferramenta de Uso de Memória integrada ao depurador ou a ferramenta de Uso de Memória pós-morte no Performance Profiler.
Os desenvolvedores do .NET podem escolher entre a ferramenta de Alocação de Objetos do .NET ou a ferramenta de Uso de Memória.
- A ferramenta de Alocação de Objetos do .NET ajuda você a identificar padrões de alocação e anomalias em seu código .NET e ajuda a identificar problemas comuns com a coleta de lixo. Essa ferramenta é executada apenas como uma ferramenta post-mortem. Você pode executar essa ferramenta em computadores locais ou remotos.
- A ferramenta Uso de memória é útil para identificar perdas de memória, que normalmente não são comuns em aplicativos .NET. Se você precisa usar recursos do depurador ao verificar a memória, como percorrer o código, a ferramenta de Uso de Memória integrada ao depurador é recomendada.
Para analisar o uso de memória com a ferramenta Uso de Memória, tire pelo menos um instantâneo de memória. Em geral, a melhor maneira de analisar a memória é usar dois instantâneos: o primeiro, logo antes de um problema de memória suspeito e o segundo instantâneo, logo após a ocorrência de um problema de memória suspeito. Depois, é possível exibir uma comparação dos dois instantâneos e ver exatamente o que mudou. A ilustração a seguir mostra como tirar um instantâneo com a ferramenta integrada ao depurador.
Ao selecionar um dos links de seta, você obtém uma exibição diferencial do heap (uma seta vermelha para cima mostra uma contagem crescente de objetos crescente à esquerda ou um tamanho de heap crescente à direita. Se você clicar no link à direita, terá uma exibição diferencial do heap, ordenada por objetos com maior aumento de tamanho de heap. Isso pode ajudá-lo a identificar problemas de memória. Por exemplo, na ilustração abaixo, os bytes usados por objetos ClassHandlersStore
aumentaram em 3.492 bytes no segundo instantâneo.
Se você clicar no link à esquerda, na exibição Uso de Memória, a exibição do heap será organizada pela contagem de objetos: os objetos de um tipo específico com maior aumento em número são mostrados na parte superior (classificados pela coluna Comparação de Contagem).
Instrumentação
A ferramenta de instrumentação é semelhante à ferramenta Uso da CPU, mas ela fornece contagens de chamada exatas e é baseada na hora do relógio em vez de na utilização da CPU. O método de instrumentação requer mais sobrecarga do que a ferramenta Uso da CPU. Essa ferramenta está disponível no Performance Profiler. Abra o Performance Profiler escolhendo Depurar>Performance Profiler (ou Alt + F2). Para saber mais, confira Instrumentação.
Examinar E/S do Arquivo
A ferramenta E/S de Arquivo ajuda você a entender como pode otimizar suas operações de E/S de Arquivo para melhorar o desempenho em seus aplicativos. Se você estiver tentando investigar e diagnosticar tempos de carregamento lentos, a nova ferramenta de E/S de Arquivo poderá ajudá-lo a entender como as operações de E/S afetam o tempo gasto. Essa ferramenta está disponível no Performance Profiler. Abra o Performance Profiler escolhendo Depurar > Performance Profiler (ou Alt + F2).
A ferramenta mostra as operações de leitura e gravação de arquivo em uma exibição de lista com guias.
Examinar o desempenho usando PerfTips
Geralmente, a maneira mais fácil de exibir informações de desempenho é usando PerfTips. Usando PerfTips, você pode exibir informações de desempenho ao interagir com seu código. É possível verificar informações como a duração do evento (medido da última pausa do depurador ou da inicialização do aplicativo). Por exemplo, se você executar o código em etapas (F10, F11), PerfTips mostrará a duração de runtime do aplicativo da operação da etapa anterior até a etapa atual.
Você pode usar PerfTips para examinar quanto tempo leva para um bloco de código ser executado ou quanto tempo leva para uma única função ser concluída.
PerfTips mostram os mesmos eventos que também aparecem na exibição Eventos das Ferramentas de Diagnóstico. A exibição Eventos das Ferramentas de Diagnóstico mostra diferentes eventos que ocorrem durante a depuração, como a configuração de um ponto de interrupção ou uma operação de depuração passo a passo de código.
Observação
Se você tiver o Visual Studio Enterprise, também poderá ver eventos do IntelliTrace nessa guia.
Analisar código assíncrono (.NET)
A ferramenta .NET Async permite que você analise o desempenho do código assíncrono em seu aplicativo. Essa ferramenta está disponível no Performance Profiler. Abra o Performance Profiler escolhendo Depurar>Performance Profiler (ou Alt + F2).
A ferramenta mostra cada operação assíncrona em uma exibição de lista. Você pode ver informações como a hora de início, a hora de término e o tempo total de uma operação assíncrona.
Analisar código assíncrono (.NET)
A ferramenta .NET Async permite que você analise o desempenho do código assíncrono em seu aplicativo. Essa ferramenta está disponível no Performance Profiler. Abra o Performance Profiler escolhendo Depurar>Performance Profiler (ou Alt + F2).
A ferramenta mostra cada operação assíncrona em uma exibição de lista. Você pode ver informações como a hora de início, a hora de término e o tempo total de uma operação assíncrona.
Analisar o desempenho do banco de dados (.NET Core)
Para aplicativos .NET Core que usam ADO.NET ou Entity Framework Core, a ferramenta Banco de Dados permite que você registre as consultas de banco de dados que seu aplicativo faz durante uma sessão de diagnóstico. Em seguida, você pode analisar informações sobre consultas individuais para encontrar locais em que o desempenho do aplicativo possa ser melhorado. Essa ferramenta está disponível no Performance Profiler. Abra o Performance Profiler escolhendo Depurar>Performance Profiler (ou Alt + F2).
A ferramenta mostra cada consulta em uma exibição de lista. Você pode ver informações como a hora de início e a duração da consulta.
Visualizar contadores de .NET (.NET Core)
A partir do Visual Studio 2019 versão 16.7, você pode usar a ferramenta Contadores do .NET no Visual Studio para visualizar contadores de desempenho. Você pode visualizar contadores criados usando contadores dotnet. Os contadores dotnet dão suporte a muitos contadores, como o uso da CPU e o tamanho do heap do coletor de lixo.
A ferramenta mostra valores dinâmicos para cada contador em uma exibição de lista.
Examinar eventos de aplicativo
O visualizador de eventos genéricos permite que você exiba a atividade do aplicativo por meio de uma lista de eventos, como carga de módulo, início de thread e configurações do sistema, para ajudar a diagnosticar melhor o desempenho do seu aplicativo diretamente dentro do criador de perfil do Visual Studio. Essa ferramenta está disponível no Performance Profiler. Abra o Performance Profiler escolhendo Depurar>Performance Profiler (ou Alt + F2).
A ferramenta mostra cada evento em uma exibição de lista. As colunas fornecem informações sobre cada evento, como o nome do evento, o carimbo de data/hora e a ID do processo.
Exibir eventos personalizados nos gráficos da linha do tempo
Você pode criar programaticamente eventos personalizados que aparecem como ícones nos gráficos da linha do tempo, como os gráficos da linha do tempo de utilização da CPU e do uso da memória. Para obter mais informações, consulte Adicionar marcas de usuário à linha do tempo.
Analisar o consumo de recursos (XAML)
Em aplicativos XAML, como aplicativos WPF da área de trabalho do Windows e aplicativos UWP, é possível analisar o consumo de recursos usando a ferramenta Linha do Tempo do Aplicativo. Por exemplo, é possível analisar o tempo gasto pelo aplicativo para preparar quadros de interface do usuário (layout e renderização), atender a solicitações de rede e de disco e em cenários como inicialização do aplicativo, carregamento de página e redimensionamento do Windows. Para usar a ferramenta, escolha Linha do Tempo do Aplicativo no Performance Profiler e, em seguida, escolha Iniciar. No aplicativo, percorra o cenário com um problema de consumo de recursos suspeito e escolha Parar coleta para gerar o relatório.
Taxas de quadros baixas no gráfico Taxa de transferência visual podem corresponder aos problemas visuais vistos ao executar o aplicativo. Da mesma forma, números elevados no gráfico Utilização de thread de interface do usuário também podem corresponder a problemas de capacidade de resposta da interface do usuário. No relatório, é possível selecionar um período com um problema de desempenho suspeito e, em seguida, examinar as atividades detalhadas de thread de interface do usuário na exibição Detalhes da linha do tempo (painel inferior).
Na exibição Detalhes da linha do tempo, você encontrará informações como o tipo de atividade (ou o elemento de interface do usuário envolvido) junto com a duração da atividade. Por exemplo, na ilustração, um evento Layout de um controle Grade usa 57,53 ms.
Para obter mais informações, consulte Linha do Tempo do Aplicativo.
Examinar os eventos de desempenho e de acessibilidade da interface do usuário (UWP)
Nos aplicativos UWP, é possível habilitar a Análise de interface do usuário na janela Ferramentas de Diagnóstico. A ferramenta pesquisa problemas comuns de desempenho ou de acessibilidade, mostrando-os na exibição Eventos durante a depuração. As descrições de eventos fornecem informações que podem ajudar a resolver problemas.
Analisar o uso da GPU (Direct3D)
Em aplicativos Direct3D (os componentes Direct3D devem estar no C++), é possível examinar a atividade na GPU e analisar problemas de desempenho. Para obter mais informações, consulte Uso da GPU. Para usar a ferramenta, escolha Uso da GPU no Performance Profiler e, em seguida, escolha Iniciar. No aplicativo, percorra o cenário de interesse na criação de perfil e, em seguida, escolha Parar coleta para gerar um relatório.
Ao selecionar um período nos gráficos e escolher Exibir detalhes, uma exibição detalhada será exibida no painel inferior. Na exibição detalhada, é possível examinar as atividades que estão ocorrendo em cada CPU e GPU. Selecione eventos no painel inferior para obter pop-ups na linha do tempo. Por exemplo, selecione o eventos Presente para exibir pop-ups da chamada Presente. (As linhas VSync verticais cinza claro podem ser usadas como referência para entender se determinadas chamadas Presentes perderam VSync. Deve haver uma chamada Presente entre cada dois VSyncs para que o aplicativo atinja constantemente 60 FPS.)
Também é possível usar os gráficos para determinar se há gargalos de desempenho limitados à CPU ou à GPU.
Analisar o desempenho (ferramentas herdadas)
No Visual Studio 2019, o Gerenciador de Desempenho herdado e as ferramentas de criação de perfil relacionadas, como o Assistente de Desempenho, foram incluídas no Performance Profiler, que pode ser aberto usando o Depurar>Performance Profiler. No Performance Profiler, as ferramentas de diagnóstico disponíveis dependem do destino escolhido e do projeto de inicialização aberto atual. A ferramenta Uso da CPU fornece a capacidade de amostragem com suporte prévio no Assistente de Desempenho. A ferramenta Instrumentação fornece a capacidade de criação de perfil instrumentada (para contagens e durações precisas de chamadas) que estava no Assistente de Desempenho. Ferramentas de memória adicionais também aparecem no Performance Profiler.