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 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 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 compilações de versão. 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 dá suporte a aplicativos .NET, ASP.NET, C++ou modo misto (.NET e nativos).
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 projeto, indicando uma implantação local.
Na barra de menus, selecione Depurar>Criador de Perfil de Desempenho.
Em Ferramentas Disponíveis, selecione Uso de Memóriae, em seguida, selecione Iniciar.
! [OBSERVAÇÃO] Para alguns tipos de projeto, como o CMake, você deve definir o destino de inicialização como Executável. Para obter mais informações, consulte Quais ferramentas têm suporte para 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.
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.
Se você tiver problemas para coletar ou exibir dados, confira Solucionar erros de criação de perfil 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 do relatório Uso de Memória detalhadas em novas janelas do Visual Studio. Um relatório de detalhes do instantâneo mostra os tipos e instâncias em um instantâneo. Um relatório de comparações de diferenças de instantâneos compara os tipos e as instâncias em dois instantâneos.
Para C++, a coluna Objetos (Comparação) é denominada Alocações (Comparação).
| Imagem | Descrição |
|---|---|
|
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. |
|
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 ![]() |
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. |
|
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.
Nota
Para código .NET, o ícone Instâncias de exibição (
) só está disponível ao usar a ferramenta Uso de Memória integrada ao depurador 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 do .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.
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.
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.
A Visão de Tipos exibe o número e o tamanho dos tipos na captura instantânea.
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.)
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.
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 Perdas do manipulador de eventos, disponível no Visual Studio 2022 versão 17.9 Versão Prévia 1, mostra possíveis perdas de memória que podem ocorrer quando um objeto assina o evento de outro objeto. Se o editor do evento sobreviver ao assinante, o assinante permanecerá vivo, 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.
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.
Escolha um instantâneo na lista Comparar com de um relatório gerenciado ou nativo.
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:
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).
