Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A ferramenta Uso de Memória monitora o uso da memória do aplicativo. Você pode usar a ferramenta para estudar os efeitos de memória em tempo real de cenários que você está desenvolvendo ativamente em 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 Uso de Memória tem suporte em aplicativos .NET, ASP.NET, C++ou modo misto (.NET e nativos).
A ferramenta Uso de Memória pode executar em builds de versão ou de depuração. Neste artigo, mostramos como usar a ferramenta de Uso de Memória no Visual Studio Performance Profiler, que é recomendada para release builds. 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 seu idioma de desenvolvimento preferido ou runtime 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 Uso de Memória suporta aplicativos .NET, ASP.NET, C++, ou modo misto (.NET e nativo).
No menu Depurar, defina a configuração da solução como Liberar e selecione o destino de implantação.
O destino de implantação normalmente corresponde ao nome do project, indicando uma implantação local.
Na barra de menus, selecione DepurarCriador de Perfil de Desempenho.
Na guia Flexível , selecione Uso de Memória e, em seguida, selecione Iniciar.
Captura de tela que mostra a opção Uso de Memória e o botão Iniciar.
- Em Ferramentas Disponíveis, selecione Uso de Memóriae, em seguida, selecione Iniciar. iniciar uma sessão de diagnóstico de uso de memória.
Nota
Para alguns tipos de project, como o CMake, você deve definir o destino de inicialização como Executable. Para obter mais informações, consulte Quais ferramentas têm suporte para o meu projeto?.
Monitorar o uso de memória
Quando você inicia uma sessão de diagnóstico, seu aplicativo é iniciado e a janela Ferramentas de Diagnóstico exibe um grafo de linha do tempo do uso da memória do aplicativo.
O grafo da linha do tempo mostra as flutuações de memória à medida que o aplicativo é executado. Picos no grafo 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 o uso de memória ineficiente ou até mesmo um vazamento de memória.
Tirar 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 talvez você encontre problemas de memória a serem investigados. Você pode tirar instantâneos durante uma sessão de diagnóstico para capturar o uso de memória em momentos específicos. É bom obter uma captura de referência de uma aplicação antes que um problema de memória apareça. 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 desejar capturar os dados de memória.
Captura de tela ao tirar 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 você terminar de coletar ou tiver tirado instantâneos, selecione Interromper Coleta.
Captura de tela ao parar a coleta.
Captura de tela ao parar a coleta.
Se você tiver problemas para coletar ou exibir dados, veja Solucionar erros de perfilamento e corrigir problemas.
Relatórios de uso de memória
Depois de interromper a coleta de dados, a ferramenta de Uso de Memória interrompe o aplicativo e exibe a página de visão geral de Uso de Memória.
Instantâneos de uso de memória
Os números nos painéis Captura de Tela mostram os objetos e bytes na memória no momento em que cada captura foi feita, e a diferença entre a captura de tela e a anterior.
Os números são links que abrem exibições detalhadas de relatório Memory Usage em novas janelas Visual Studio. Um relatório de detalhes do instantâneo mostra os tipos e instâncias em um instantâneo. Um relatório de diferenças de instantâneos compara os tipos e instâncias de dois instantâneos.
Captura de tela dos links de visualização de instantâneoLinks de visualização de instantâneo
Para C++, a coluna Objetos (Comparação) é denominada Alocações (Comparação).
| Imagem | Descrição |
|---|---|
| Etapa 1Guia do Processo-1 | O número total de objetos na memória quando o instantâneo foi tirado. Selecione esse link para exibir um relatório de detalhes do instantâneo classificado pela contagem de instâncias dos tipos. |
| Etapa 2Guia do Processo-2 | A diferença entre o número total de objetos de memória neste instantâneo e o instantâneo anterior. Selecione esse link para exibir um relatório de diferenças de instantâneos classificado pela diferença na contagem total de instâncias dos tipos. |
| Etapa 3 do Etapa 3Guide-3 do processo | O número total de bytes na memória quando o instantâneo foi tirado. Selecione esse link para exibir um relatório de detalhes do instantâneo classificado pelo tamanho total de instâncias do tipo. |
| Etapa 4Guia do 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 desse instantâneo é maior que o anterior e um número negativo significa que o tamanho é menor. Linha de base significa que um instantâneo é o primeiro em uma sessão de diagnóstico. Nenhuma Diferença significa que a diferença é zero. Selecione esse link para exibir um relatório de diferenças de instantâneos 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 (Comparação) na tabela de resumo de Uso de Memória.
Captura de tela do relatório de tipo gerenciado.relatório de tipo gerenciado
Nota
Para código .NET, o ícone Exibir Detalhes (
) está disponível apenas ao usar a ferramenta de uso de memória integrada ao debugger ou quando você abre um instantâneo de heap e escolhe Depurar Memória Gerenciada.
O painel superior mostra a contagem e o tamanho dos tipos no instantâneo, incluindo o tamanho de todos os objetos referenciados pelo tipo (inclusive tamanho).
A árvore Caminhos para 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 somente quando o último tipo que faz referência a ele foi liberado. Para obter mais informações sobre como usar a árvore Caminhos para Raiz, confira Analisar o caminho crítico para raiz.
Captura de tela do relatório de tipo gerenciado.relatório de tipo gerenciado
Nota
Para código .NET, o ícone Visualizar Instâncias (
) só está disponível ao usar a ferramenta de Uso de Memória integrada ao debugger ou ao abrir o instantâneo heap e escolher Depurar Memória Gerenciada.
O painel superior mostra a contagem e o tamanho dos tipos no instantâneo, incluindo o tamanho de todos os objetos referenciados pelo tipo (inclusive tamanho).
A árvore Caminhos para 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 somente quando o último tipo que faz referência a ele foi liberado. Para obter mais informações sobre como usar a árvore Caminhos para Raiz, confira Analisar o caminho crítico para 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 da árvore de relatórios
Muitos tipos em 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âneos 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 por nome de tipo, insira o nome na caixa Filtrar. O filtro não diferencia maiúsculas de minúsculas e reconhece a cadeia de caracteres especificada em qualquer parte dos nomes do tipo.
Selecione Mostrar Apenas Meu Código na lista suspensa Filtrar para ocultar a maioria das instâncias geradas pelo código externo. Os tipos externos pertencem ao sistema operacional ou aos componentes da estrutura ou são gerados pelo compilador.
Selecione Recolher Pequenos Objetos na lista suspensa Filtrar para ocultar os tipos cujo Tamanho (bytes) é inferior a 0,5% do total de memória.
Relatórios de tipos nativos
Escolha o link atual de uma célula Alocações (Comparação) ou Tamanho do Heap (Comparação) na tabela de resumo de Uso de Memória da janela 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 Visão de Tipos exibe o número e o tamanho dos tipos na captura instantânea.
Escolha o ícone Exibir Detalhes ao lado de um tipo selecionado para exibir informações sobre os objetos do tipo selecionado no instantâneo.
O modo de exibição Instâncias mostra cada instância do tipo selecionado. A seleção de uma instância exibe a pilha de chamadas 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 o ícone Exibir Instâncias ao lado de um tipo selecionado para exibir informações sobre os objetos selecionados no instantâneo.
O modo de exibição Instâncias mostra cada instância do tipo selecionado. A seleção de uma instância exibe a pilha de chamadas 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 do tipo selecionado.
Captura de tela da exibição de Pilhas.
Escolha Pilhas para ver a pilha de alocação do tipo selecionado.
Captura de tela da exibição de Pilhas.
Informações sobre o uso de memória
Para memória gerenciada, a ferramenta Análise de Memória também fornece várias informações automáticas internas avançadas. Selecione a guia Insights nos relatórios de tipos gerenciados e ela mostrará os insights automáticos aplicáveis, como Strings duplicadas e Matrizes esparsas e Perdas do manipulador de eventos.
Captura de tela da exibição de insights na ferramenta Uso de Memória.Aproveitamento de insights de Uso de Memória
Captura de tela da exibição de insights na ferramenta Uso de Memória.Aproveitamento de insights de Uso de Memória
A seção Cadeias de caracteres duplicadas mostra a lista de cadeias de caracteres 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 preenchidas principalmente com zero elementos, que podem ser ineficientes em termos de desempenho e uso de memória. A ferramenta de análise de memória detectará automaticamente essas matrizes e mostrará a quantidade de memória que está sendo desperdiçada devido a esses valores zero.
A seção Event Handler Leaks, disponível no Visual Studio versão 17.9 preview 1 de 2022, mostra possíveis vazamentos de memória que podem ocorrer quando um objeto assina o evento de outro objeto. Se o publicador do evento sobreviver ao assinante, o assinante continuará existindo, mesmo que não haja outras referências a ele. Isso pode levar a vazamentos de memória, em que a memória não utilizada não é liberada corretamente, fazendo com que o aplicativo use cada vez mais memória ao longo do tempo.
Alguns tipos são conhecidos por terem campos que podem ser lidos para determinar o tamanho da memória nativa que estão mantendo. A guia Insights mostra os nós de memória nativos falsos no gráfico de objetos, que foram 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 exibição de insights nativos na ferramenta Uso de Memória.exibição de insights nativos na ferramenta Uso de Memória
Relatórios de comparação (Diff)
Escolha o link de alteração em uma célula do painel Instantâneo na página de visão geral Uso de Memória.
Captura de tela de Escolher um link de alteração em uma célula.
Escolha um instantâneo na lista "Comparar com" de um relatório administrado ou padrão.
Captura de tela da lista "Comparar com".
Captura de tela de Escolher um instantâneo da lista Comparar com.
O relatório de alteração 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 pode ser a aparência de um relatório de comparação Exibição de Tipo Nativo:
Captura de tela da exibição de comparação dos tipos nativos.Exibição de comparação dos tipos nativos
Captura de tela da exibição de comparação dos tipos nativos.Exibição de comparação dos tipos nativos
O painel superior mostra a contagem e o tamanho dos tipos no instantâneo, incluindo o tamanho de todos os objetos referenciados pelo tipo (inclusive tamanho).
Conteúdo relacionado
- Perfilação no Visual Studio
- Introdução às ferramentas de criação de perfil
- Profile seu aplicativo com GitHub Copilot Profiler Agent
- Analisar o caminho crítico para a raiz
- Escolher uma ferramenta de análise de memória
- .NET ferramenta de Alocação de Objeto
- Solucionar erros de perfilagem e corrigir questões
- Diagnosticando problemas de memória com a nova ferramenta de Análise de Memória no Visual Studio