Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A ferramenta de Uso de Memória monitora o uso de memória do seu aplicativo. Podes usar a ferramenta para estudar os efeitos de memória em tempo real de cenários que estás a desenvolver ativamente no Visual Studio. Você pode tirar instantâneos detalhados dos estados de memória do aplicativo e comparar instantâneos para encontrar as causas raiz dos problemas de memória. A ferramenta de Utilização de Memória é suportada em aplicações .NET, ASP.NET, C++ ou em modo misto (.NET e nativas).
A ferramenta de Uso de Memória pode executar em compilações de lançamento ou de depuração. Neste artigo, mostramos como usar a ferramenta de Utilização de Memória no Visual Studio Performance Profiler, que é recomendada para versões de lançamento. Para obter informações sobre como escolher a melhor ferramenta de análise de memória para suas necessidades, consulte Escolha uma ferramenta de análise de memória.
Para obter a melhor experiência com esta documentação, escolha sua linguagem de desenvolvimento ou tempo de execução preferido na lista na parte superior do artigo.
Sessões de diagnóstico de uso de memória
Para iniciar uma sessão de diagnóstico de Uso de Memória:
Abra um projeto no Visual Studio.
A ferramenta Memory Usage suporta aplicações .NET, ASP.NET, C++ ou em modo misto (.NET e nativas).
No menu Debug, defina a configuração da solução para Release e selecione o destino de implementação.
O destino de implementação normalmente corresponde ao nome do project, indicando uma implementação local.
Na barra de menus, selecione DepurarPerformance Profiler.
No separador Flexível , selecione Utilização de Memória e depois selecione Iniciar.
Captura de ecrã que mostra a opção de Utilização de Memória e o botão Iniciar.
- Em Ferramentas Disponíveis, selecione Utilização da Memóriae, em seguida, selecione Iniciar. Iniciar uma sessão de diagnóstico de Uso de Memória.
Observação
Para alguns tipos de projetos, como CMake, deve definir o destino de inicialização para Executable. Para mais informações, veja Que ferramentas são suportadas para o meu projeto?.
Monitorar o uso da memória
Quando inicia uma sessão de diagnóstico, a sua aplicação é iniciada e a janela Ferramentas de Diagnóstico exibe um gráfico de linha do tempo do uso de memória da sua aplicação.
O gráfico da linha do tempo mostra as flutuações de memória à medida que o aplicativo é executado. Picos no gráfico geralmente indicam que algum código está coletando ou criando dados e, em seguida, descartando-os quando o processamento é feito. Picos grandes indicam áreas que você pode otimizar. A principal preocupação é um aumento no consumo de memória que não é retornado. Isso pode indicar um uso ineficiente da memória ou até mesmo um vazamento de memória.
Tire instantâneos dos estados de memória do aplicativo
Um aplicativo usa um grande número de objetos e talvez você queira concentrar sua análise em um cenário. Ou, poderá detetar problemas de memória que necessitem de investigação. Você pode tirar instantâneos durante uma sessão de diagnóstico para capturar o uso da memória em momentos específicos. É aconselhável obter uma imagem inicial de um aplicativo antes que surja um problema de memória. Você pode tirar outro instantâneo após a primeira ocorrência do problema e instantâneos adicionais se puder repetir o cenário.
Para coletar instantâneos, selecione Tirar instantâneo quando quiser capturar os dados de memória.
Captura de tela de um instantâneo.
Fechar a sessão de diagnóstico
Para interromper uma sessão de monitoramento sem criar um relatório, basta fechar a janela de diagnóstico. Para gerar um relatório quando terminar de recolher ou tiver captado instantâneos, selecione Parar recolha.
Captura de tela mostrando a interrupção da coleção.
Captura de tela mostrando a interrupção da coleção.
Se tiveres problemas para coletar ou exibir dados, consulta Resolver erros de perfilagem e corrigir problemas.
Relatórios de uso de memória
Depois de parar a recolha de dados, a ferramenta Utilização da Memória para a aplicação e apresenta a página de descrição geral Utilização da Memória.
Instantâneos de uso de memória
Os números nos painéis do Instantâneo mostram os objetos e bytes na memória quando cada instantâneo foi tirado, assim como a diferença entre cada instantâneo e o anterior.
Os números são links que abrem visualizações detalhadas do relatório de Memory Usage em novas janelas do Visual Studio. Um relatório de instantâneo detalhado mostra os tipos e instâncias num instantâneo. Um relatório de diferenças (diff) entre instantâneos compara os tipos e instâncias em dois instantâneos.
Captura de tela dos links de visualização de instantâneo
Para C++, a coluna Objects (Diff) é denominada Allocations (Diff).
| Imagem | Descrição |
|---|---|
| Etapa 1Guia de Processo-1 | O número total de objetos na memória quando o instantâneo foi tirado. Selecione este link para exibir um relatório de detalhes de instantâneo classificado pela contagem de instâncias dos tipos. |
| Etapa 2Guia de Processo-2 | A diferença entre o número total de objetos de memória neste instantâneo e o instantâneo anterior. Selecione este link para exibir um relatório de comparação de instantâneo classificado pela diferença na contagem total de instâncias dos tipos. |
| Etapa 3Guia de Processo-3 | O número total de bytes na memória quando o instantâneo foi tirado. Selecione este link para exibir um relatório de detalhes de instantâneo classificado pelo tamanho total das instâncias de tipo. |
| Etapa 4Guia de Processo-4 | A diferença entre o tamanho total dos objetos de memória neste instantâneo e o instantâneo anterior. Um número positivo significa que o tamanho da memória deste instantâneo é maior do que o anterior, e um número negativo significa que o tamanho é menor. de linha de base significa que um instantâneo é o primeiro de uma sessão de diagnóstico. Sem diferença significa que a diferença é zero. Selecione este link para exibir um relatório de comparação de instantâneo classificado pela diferença no tamanho total das instâncias dos tipos. |
Relatórios de tipos gerenciados
Escolha o link atual de uma célula Objetos (Diff) na tabela de resumo do Uso de Memória.
Captura de tela do relatório de tipo gerenciado.Relatório de tipo gerenciado
Observação
Para código .NET, o ícone Ver Detalhes (
) só está disponível enquanto se utiliza a ferramenta debugger integrada de Utilização de Memória ou quando abre um heap snapshot e escolhe Depurar Memória Gerida.
O painel superior mostra a quantidade e o tamanho dos tipos no instantâneo, incluindo o tamanho de todos os objetos que são referenciados pelo tipo (Tamanho Inclusivo).
A árvore Caminhos para a Raiz no painel inferior exibe os objetos que fazem referência ao tipo selecionado no painel superior. O coletor de lixo .NET limpa a memória de um objeto apenas quando o último tipo que o referencia foi libertado. Para obter mais informações sobre como usar a árvore Caminhos para a Raiz, consulte Analisar caminho quente para a raiz.
Captura de tela do relatório de tipo gerenciado.Relatório de tipo gerenciado
Observação
Para o código .NET, o ícone
O painel superior mostra a quantidade e o tamanho dos tipos no instantâneo, incluindo o tamanho de todos os objetos que são referenciados pelo tipo (Tamanho Inclusivo).
A árvore Caminhos para a Raiz no painel inferior exibe os objetos que fazem referência ao tipo selecionado no painel superior. O coletor de lixo .NET limpa a memória de um objeto apenas quando o último tipo que o referencia foi libertado. Para obter mais informações sobre como usar a árvore Caminhos para a Raiz, consulte Analisar caminho quente para a raiz.
A árvore Tipos Referenciados exibe as referências mantidas pelo tipo selecionado no painel superior.
Captura de tela do Relatório Objetos Referenciados.
A árvore Tipos Referenciados exibe as referências mantidas pelo tipo selecionado no painel superior.
Captura de tela do Relatório Objetos Referenciados.
Filtros de árvore de relatório
Muitos tipos de aplicativos não são necessários para que os desenvolvedores de aplicativos investiguem problemas de memória. Os filtros de relatório de instantâneo podem ocultar a maioria desses tipos nas árvores de Memória Gerenciada e Caminhos para a Raiz.
Opções de classificação e filtroClassificação e filtro de uso de memória
Para filtrar uma árvore pelo nome do tipo, insira o nome na caixa de Filtro. O filtro não diferencia maiúsculas de minúsculas e reconhece a cadeia de caracteres especificada em qualquer parte do nome do tipo.
Selecione Mostrar Apenas Meu Código na lista suspensa Filtro de para ocultar a maioria das instâncias geradas por código externo. Os tipos externos pertencem ao sistema operacional ou aos componentes da estrutura ou são gerados pelo compilador.
Selecione Colapsar Pequenos Objetos na lista suspensa Filtro para ocultar tipos cujo Tamanho (Bytes) seja inferior a 0,5% da memória total.
Relatórios de tipos nativos
Selecione o link atual de um Alocações (Diff) ou Tamanho da Pilha (Diff) célula na tabela de resumo do Uso da memória da janela de Ferramentas de Diagnóstico.
Captura de tela do modo de exibição de tipo nativo.
Captura de tela do modo de exibição de tipo nativo.
A vista de tipos exibe o número e o tamanho dos tipos no snapshot.
Escolha o ícone Ver Detalhes ao lado de um tipo selecionado para mostrar informações sobre os objetos do tipo selecionado no instantâneo.
A visão Instâncias exibe cada instância do tipo selecionado. A seleção de uma instância exibe a pilha de chamadas que resultou na criação da instância no painel Pilha de Chamadas de Alocação. (Essas informações só estão disponíveis durante a depuração.)
Captura de tela do modo de exibição Instâncias e do painel Pilha de Chamadas de Alocação.
Selecione o ícone Ver instâncias ao lado de um tipo selecionado para mostrar informações sobre os objetos do tipo selecionado no instantâneo.
A visão Instâncias exibe cada instância do tipo selecionado. A seleção de uma instância exibe a pilha de chamadas que resultou na criação da instância no painel Pilha de Chamadas de Alocação. (Essas informações só estão disponíveis durante a depuração.)
Captura de tela do modo de exibição Instâncias e do painel Pilha de Chamadas de Alocação.
Escolha Pilhas para ver a pilha de alocação para o tipo selecionado.
Captura de ecrã da vista Pilhas.
Escolha Pilhas para ver a pilha de alocação para o tipo selecionado.
Captura de ecrã da vista Pilhas.
Informações sobre o uso da memória
Para memória gerenciada, a ferramenta Análise de Memória também fornece vários insights automáticos integrados poderosos. Selecione o separador Insights nos relatórios de tipos geridos e mostra os Insights automáticos aplicáveis, como Cadeias de caracteres duplicadas, Matrizes esparsase Fugas de manipuladores de eventos.
Captura de ecrã da vista de insights na ferramenta Utilização da Memória.Insight de Utilização de Memória
Captura de ecrã da vista de insights na ferramenta Utilização da Memória.Insight de Utilização de Memória
A seção Duplicate Strings mostra a lista de strings que são alocadas várias vezes no heap. Além disso, esta seção mostra o total de memória desperdiçada, ou seja, o (número de instâncias - 1) vezes o tamanho da cadeia de caracteres.
A seção Matrizes Esparsas mostra matrizes que são preenchidas principalmente com elementos zero, o que pode ser ineficiente em termos de desempenho e uso de memória. A ferramenta de análise de memória detetará automaticamente essas matrizes e mostrará quanta memória está sendo desperdiçada devido a esses valores zero.
A secção Event Handler Leaks, disponível na Visual Studio versão 17.9 Preview 1 de 2022, mostra potenciais fugas de memória que podem ocorrer quando um objeto subscreve o evento de outro objeto. Se o publicador do evento sobreviver ao assinante, o assinante permanece vivo, mesmo que não existam outras referências ao mesmo. Isso pode levar a vazamentos de memória, onde a memória não utilizada não é liberada corretamente, fazendo com que o aplicativo use mais e mais memória ao longo do tempo.
Certos tipos são conhecidos por ter campos que podem ser lidos para determinar o tamanho da memória nativa de que estão a utilizar. A guia do Insights mostra nós de memória nativos falsos no gráfico de objetos, que são retidos por seus objetos pai, de modo que a interface do usuário os reconheça e exiba seu tamanho e gráfico de referência.
Captura de tela da visualização de perceção nativa na ferramenta Uso de memória.visualização de perceção nativa na ferramenta Uso de memória
Relatórios de alteração (comparação)
Escolha o link de alteração numa célula do painel de Instantâneo na página de visão geral do uso da memória.
Captura de ecrã de Selecionar um link de alteração numa célula.
Escolha um snapshot na lista Compare With de um relatório gerido ou nativo.
Captura de ecrã da lista de Comparar Com.
Captura de ecrã de "Escolha um instantâneo na lista para comparar com".
O relatório de alterações adiciona colunas (marcadas com (Diff)) ao relatório base que mostram a diferença entre o valor do instantâneo base e o instantâneo de comparação. Veja como um relatório de comparação da Visualização de Tipo Nativa pode parecer:
Captura de tela da visualização de comparação de tipos nativos.Visualização de Comparação de Tipos Nativos
Captura de tela da visualização de comparação de tipos nativos.Visualização de Comparação de Tipos Nativos
O painel superior mostra a quantidade e o tamanho dos tipos no instantâneo, incluindo o tamanho de todos os objetos que são referenciados pelo tipo (Tamanho Inclusivo).
Conteúdo relacionado
- Perfilamento em Visual Studio
- Primeira visão das ferramentas de análise de perfil
- Perfile a sua aplicação com GitHub Copilot Profiler Agent
- Analisar a via crítica para a raiz
- Escolha uma ferramenta de análise de memória
- .NET Ferramenta de Alocação de Objetos
- Solucionar erros de perfilação e corrigir problemas
- Diagnosticar problemas de memória com a nova ferramenta de Utilização de Memória em Visual Studio