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.

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.

    Screenshot of the Dotnet Object Allocation Tracking tool selected.

    Screenshot of the Dotnet Object Allocation Tracking tool selected.

  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.

    Screenshot of window showing Stop collection.

    Screenshot of window showing Stop collection.

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

    Screenshot of the Allocation tab.

    Screenshot of the Allocation tab.

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.

Screenshot of settings for the Dotnet Allocation tool.

Screenshot of settings for the Dotnet Allocation tool.

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.

Screenshot of an adjusted sampling rate.

Screenshot of an adjusted sampling rate.

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.

Screenshot of graph for the Dotnet Allocation tool.

Screenshot of graph for the Dotnet Allocation tool.

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.

Screenshot of filtered graph of the Dotnet Allocation time.

Screenshot of filtered graph of the Dotnet Allocation time.

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.

Screenshot of the Allocation view expanded.

Screenshot of the Allocation view expanded.

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:

  • The value type symbol – Um tipo de valor, como inteiro

  • The value-type collection symbol – uma coleção de tipos de valor, como matriz de inteiros

  • The reference type symbol – um tipo de referência, como cadeia de caracteres

  • The reference-type collection symbol – 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.

Screenshot of the Call Tree view.

Screenshot of the Call Tree view.

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.

Screenshot of the hot path expanded.

Screenshot of the hot path expanded.

Funções

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

Screenshot of the Functions view.

Screenshot of the Functions view.

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.

Screenshot of the Collection view.

Screenshot of the Collection view.

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.

Screenshot of pie charts in the Collection view.

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.