Partilhar via


Analisar o uso de memória usando a ferramenta de Alocação de Objeto do .NET

Você pode ver quanta memória seu aplicativo usa e quais caminhos de código alocam mais memória usando a ferramenta de Alocação de Objeto do .NET.

Depois de executar a ferramenta, você pode ver os caminhos de execução da função em que os objetos estão sendo alocados. Em seguida, você pode rastrear de volta até a raiz da árvore de chamadas que está ocupando a maior parte da memória.

Para obter um tutorial que demonstra como melhorar o desempenho ao usar a ferramenta Alocação de Objeto .NET, consulte Estudo de caso: Guia para iniciantes sobre como otimizar o código.

Instalação

  1. Selecione Alt+F2 para abrir o Criador de Perfil de Desempenho no Visual Studio.

  2. Marque a caixa de seleção Acompanhamento de Alocação de Objeto do .NET.

    Captura de tela da ferramenta de rastreamento de alocação de objeto do Dotnet selecionada.

    Captura de tela da ferramenta de rastreamento de alocação de objeto do Dotnet selecionada.

  3. Selecione o botão Iniciar para executar a ferramenta.

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

  4. Depois que a ferramenta começar a ser executada, percorra o cenário cujo perfil você deseja criar em seu aplicativo. Em seguida, selecione Parar coleta ou feche seu aplicativo para ver seus dados.

    Captura de tela da janela mostrando Interromper coleta.

    Captura de tela da janela mostrando Interromper coleta.

  5. Selecione a guia Alocação. Dados de alocação de memória semelhantes aos seguintes são exibidos.

    Captura de tela da guia Alocação.

    Captura de tela da guia Alocação.

Agora você pode analisar a alocação de memória dos objetos.

Durante a coleta, a ferramenta de acompanhamento pode reduzir a velocidade do aplicativo com perfil. Se o desempenho da ferramenta de acompanhamento ou do aplicativo estiver lento e se você não precisar rastrear todos os objetos, poderá ajustar a taxa de amostragem. Para fazer isso, selecione o símbolo de engrenagem ao lado da ferramenta de acompanhamento na página de resumo do criador de perfil.

Captura de tela das configurações da ferramenta de Alocação do Dotnet.

Captura de tela das configurações da ferramenta de Alocação do Dotnet.

Ajuste a taxa de amostragem para a taxa desejada. Essa alteração ajuda a acelerar o desempenho do seu aplicativo durante a coleta e a análise.

Captura de tela de uma taxa de amostragem ajustada.

Captura de tela de uma taxa de amostragem ajustada.

Para obter mais informações sobre como tornar a ferramenta mais eficiente, confira Otimizar as configurações do Criador de Perfil.

Entender seus dados

Na exibição gráfica anterior, o grafo superior mostra o número de objetos dinâmicos em seu aplicativo. O grafo inferior Delta do objeto mostra a alteração percentual de objetos de aplicativo. Barras vermelhas indicam quando a coleta de lixo ocorreu.

Captura de tela do grafo da ferramenta de alocação do Dotnet.

Captura de tela do grafo da ferramenta de alocação do Dotnet.

Você pode filtrar os dados tabulares para exibir a atividade apenas para um intervalo de tempo especificado selecionando um intervalo de tempo. Quando você faz isso, as informações exibidas nas guias têm como escopo o intervalo de tempo filtrado.

Captura de tela de um grafo filtrado do tempo de alocação do Dotnet.

Captura de tela de um grafo filtrado do tempo de alocação do Dotnet.

Você também pode ampliar ou reduzir o grafo.

Alocação

A exibição Alocação mostra o local dos objetos que estão alocando memória e quanta memória esses objetos estão alocando.

Captura de tela da exibição de alocação expandida.

Captura de tela da exibição de alocação expandida.

As seguintes informações aparecem na exibição Alocação:

  • A coluna Tipo é uma lista de classes e estruturas que ocupam memória. Clique duas vezes em um tipo para exibir o backtrace dele como uma árvore de chamadas invertida. Somente na exibição Alocação, você pode ver itens dentro da categoria selecionada que ocuparão memória.

  • A coluna Alocações mostra o número de objetos que assumem a memória em uma determinada função ou tipo de alocação. Essa coluna aparece somente nas exibições Alocação, Árvore de Chamadas e Funções.

  • As colunas Bytes e Tamanho Médio (Bytes) não aparecem por padrão. Para mostrá-las, clique com o botão direito do mouse na coluna Tipo ou Alocações e selecione as opções Bytes e Tamanho Médio (Bytes) para adicioná-las ao gráfico.

    As duas colunas são semelhantes a Total (Alocações) e Próprio (Alocações), exceto que elas mostram a quantidade de memória utilizada em vez do número de objetos ocupando memória. Essas colunas aparecem apenas na exibição Alocação.

  • A coluna Nome do módulo mostra o módulo que contém a função ou o processo que está chamando.

Todas essas colunas são classificáveis. Para as colunas Tipo e Nome do Módulo, você pode classificar itens em ordem alfabética em ordem crescente ou decrescente. Para Alocações, Bytes e Tamanho Médio (Bytes), você pode classificar itens aumentando ou diminuindo o valor numérico.

Símbolos

Os seguintes símbolos aparecem nas guias Alocação, Árvore de Chamadas e Funções:

  • O símbolo de tipo de valor – Um tipo de valor, como inteiro

  • O símbolo da coleção de tipo de valor – uma coleção de tipos de valor, como matriz de inteiros

  • O símbolo de tipo de referência – um tipo de referência, como cadeia de caracteres

  • O símbolo da coleção de tipo de referência – uma coleção de tipos de referência, como matriz de cadeias de caracteres

Árvore de chamadas

A exibição Árvore de Chamadas mostra os caminhos de execução da função que contêm objetos que alocam muita memória.

Captura de tela da visualização da árvore de chamadas.

Captura de tela da visualização da árvore de chamadas.

As seguintes informações aparecem no modo de exibição Árvore de Chamadas:

  • A coluna Nome da Função mostra o processo ou o nome da função que contém objetos que alocam memória. A exibição é baseada no nível do nó que você está inspecionando.
  • As colunas Total (Alocações) e Tamanho Total (Bytes) mostram o número de objetos alocados e a quantidade de memória usada por uma função e todas as outras funções que ela chama. A coluna Tamanho total (bytes) se encontra oculta por padrão.
  • As colunas Próprio (Alocações) e Tamanho Próprio (Bytes) mostram o número de objetos alocados e a quantidade de memória usada por apenas uma função ou tipo de alocação selecionado.
  • A coluna Tamanho Médio (Bytes) mostra as mesmas informações que na exibição Alocações. Essa coluna é ocultada por padrão.
  • A coluna Nome do módulo mostra o módulo que contém a função ou o processo que está chamando.

As opções adicionais que aparecem no modo de exibição Árvore de Chamadas incluem:

  • O botão Expandir Caminho Crítico realça um caminho de execução de função que contém muitos objetos que estão alocando memória. O algoritmo começa em um nó selecionado e realça o caminho da maioria das alocações, orientando você na investigação.
  • O botão Mostrar Caminho Crítico mostra ou oculta os símbolos de chama que indicam quais nós fazem parte do caminho crítico.

Captura de tela do caminho crítico expandido.

Captura de tela do caminho crítico expandido.

Funções

A exibição Funções mostra processos, módulos e funções que estão alocando memória.

Captura de tela da exibição das Funções.

Captura de tela da exibição das Funções.

As informações que aparecem na exibição Funções incluem:

  • A coluna Nome mostra os processos como os nós de nível mais alto. Os processos subjacentes são módulos e, abaixo dos módulos, há funções.

  • As colunas a seguir, que mostram as mesmas informações que nas exibições Alocação e Árvore de chamadas:

    • Total (Alocações)
    • Próprio (Alocações)
    • Tamanho Total (Bytes)
    • Tamanho Próprio (Bytes)
    • Tamanho Médio (Bytes)

Coleção

A exibição Coleção mostra quantos objetos foram coletados ou retidos durante a coleta de lixo.

Captura de tela da exibição da Coleção.

Captura de tela da exibição da Coleção.

As seguintes informações aparecem na exibição Coleção.

  • A coluna GC mostra a ID dessa coleta de lixo no ciclo de vida do arquivo executável.
  • A coluna Geração mostra a geração da coleta de lixo.
  • A coluna Tipo de GC mostra o tipo dessa coleta de lixo.
  • A coluna Motivo do GC mostra o motivo desse evento de coleta de lixo.
  • A coluna Duração da Pausa mostra o momento em que a execução foi bloqueada porque o coletor de lixo precisa de uso exclusivo do heap. Para uma coleta de lixo em segundo plano, esse valor é pequeno.
  • A coluna Tamanho do LOH mostra o tamanho do heap de objetos grandes depois que o coletor de lixo foi executado.
  • A coluna Tamanho do POH mostra o tamanho do heap de objetos fixados depois que o coletor de lixo foi executado.
  • A coluna Finalizable Surv (MB) mostra o número de MB de objetos que têm finalizadores (destruidores) que sobreviveram à coleta de lixo.
  • A coluna Objetos fixados mostra o número de objetos fixados que essa coleta de lixo promoveu.
  • A coluna Coletados mostra o número de objetos captados pelo coletor de lixo.
  • A coluna Persistidos mostra o número de objetos que persistiram após a execução do coletor de lixo.

Quando você seleciona uma linha, essa exibição também mostra gráficos de pizza para visualizar objetos coletados e sobrevividos por tipo.

Captura de tela de gráficos de pizza na exibição da Coleção.

Ferramentas de filtragem

As exibições Alocações, Árvore de Chamadas e Funções contêm as opções Mostrar Apenas Meu Código e Mostrar Código Nativo e uma caixa de filtro.

  • Mostrar Apenas Meu Código recolhe sistemas, estruturas e outros códigos não do usuário em quadros de [Código Externo] para que você possa se concentrar apenas em seu código. Para obter mais informações, confira Depurar o código do usuário com Apenas Meu Código.
  • Mostrar Código Nativo mostra o código nativo dentro do destino de análise e pode incluir código não de usuário.
  • Com a caixa de filtro, você pode filtrar a coluna Nome ou Nome da função com base no valor fornecido. Insira um valor de cadeia de caracteres na caixa. Em seguida, a tabela mostra apenas os tipos que contêm essa cadeia de caracteres.