Partilhar via


Analisar o uso de memória usando a ferramenta de alocação de objetos .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 objetos .NET.

Depois de executar a ferramenta, você pode ver os caminhos de execução da função onde os objetos estão sendo alocados. Em seguida, podes rastrear até à raiz da árvore de chamadas que está a ocupar mais memória.

Para obter um tutorial que mostra como melhorar o desempenho usando a ferramenta de alocação de objetos .NET, consulte Estudo de caso: Guia para iniciantes para otimizar o código.

Configuração

  1. No projeto do Visual Studio, defina a configuração da solução como Release e selecione o destino de implantação.

    O destino de implantação normalmente corresponde ao nome do projeto, indicando uma implantação local.

  2. Selecione Alt+F2 para abrir o Performance Profiler no Visual Studio.

  3. Marque a caixa de seleção de Controle de Alocação de Objetos .NET.

    Captura de ecrã da ferramenta Dotnet Object Allocation Tracking selecionada.

  4. Para executar a ferramenta, selecione o botão Iniciar.

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

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

    Captura de ecrã da janela a mostrar Parar recolha.

  6. Selecione o separador de Alocação . Dados de alocação de memória semelhantes aos seguintes aparecem.

    Captura de ecrã da guia Alocação.

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

Durante a coleta, a ferramenta de rastreamento pode tornar o aplicativo com perfil mais lento. Se o desempenho da ferramenta de rastreamento 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 monitorização na página de resumo do perfilador.

Captura de tela das configurações da ferramenta Dotnet Allocation (Dotnet Allocation Tool). Configurações de

Ajuste a taxa de amostragem à 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.

Para obter mais informações sobre como tornar a ferramenta mais eficiente, consulte Otimizando as configurações do Profiler.

Compreender os seus dados

Na vista gráfica seguinte, o gráfico superior mostra o número de objetos dinâmicos na sua aplicação. O gráfico na parte inferior delta do objeto mostra a alteração percentual dos objetos da aplicação. Barras vermelhas indicam quando a coleta de lixo ocorreu.

pt-PT: Captura de tela do gráfico da ferramenta Dotnet Allocation.

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 que aparecem nas guias têm como escopo o intervalo de tempo filtrado.

Captura de ecrã do gráfico filtrado do tempo de alocação do .NET.

Você também pode aumentar ou diminuir o zoom do gráfico.

Perspetivas

Se algum insight aparecer na visualização Insights , use o link fornecido para obter mais informações sobre o problema identificado.

Obtenha assistência de IA

Se você tiver o Copilot, poderá obter assistência de IA enquanto analisa os principais insights. O Copilot fornece informações e insights relacionados a um conjunto de insights de desempenho específicos. Com o Copilot, você também pode fazer perguntas sobre objetos que usam mais memória, o que pode ajudá-lo a produzir código mais eficiente ou econômico.

O botão Ask CopilotCaptura de ecrã do botão Ask Copilot. aparece mesmo que nenhum insight de desempenho específico seja identificado. Selecione Perguntar ao Copiloto para aprender com o Copilot e começar a fazer perguntas.

Repartição

A visualização de Alocação mostra o local dos objetos que estão a alocar memória e quanta memória esses objetos estão a alocar.

Captura de ecrã da vista de Alocação expandida.

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

  • A coluna Tipo é uma lista de classes e estruturas que consomem memória. Faça duplo clique num tipo para exibir o seu backtrace como uma árvore de chamadas invertida. Na vista de alocação , pode ver itens dentro da categoria selecionada que ocupam memória.

  • A coluna Alocações mostra o número de objetos que ocupam memória dentro de um determinado tipo ou função de alocação. Esta coluna aparece apenas nas visualizações Allocation, Call Treee Functions.

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

    As duas colunas são semelhantes a Total (Alocações) e Self (Alocações), exceto que mostram a quantidade de memória utilizada em vez do número de objetos que utilizam memória. Essas colunas aparecem somente na vista de alocação .

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

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

Símbolos

Os seguintes símbolos aparecem nas abas Allocation, Call Treee Functions:

  • O símbolo de tipo de valor - Um tipo de valor como o inteiro

  • O símbolo de coleção de tipo de valor - Uma coleção de tipo de valor como uma matriz de inteiros

  • O símbolo do tipo de referência - Um tipo de referência como uma cadeia de caracteres

  • O símbolo de coleção de tipo de referência - Uma coleção de tipo de referência como matriz de cadeias de caracteres

Árvore de chamadas

A visualização Árvore de Chamadas mostra os caminhos de execução das funções que contêm objetos que estão a alocar muita memória.

Captura de ecrã da vista Árvore de Chamadas.

As seguintes informações aparecem na Árvore de chamadas vista:

  • 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) está oculta por padrão.
  • As colunas Self (Allocations) e Self-Size (Bytes) mostram o número de objetos alocados e a quantidade de memória usada por uma única função selecionada ou tipo de alocação.
  • A coluna Tamanho Médio (Bytes) mostra as mesmas informações que na visualização Alocações. Esta coluna está oculta por padrão.
  • A coluna Nome do módulo mostra o módulo que contém a função ou processo que está a ser chamado.

As opções adicionais que aparecem na visualização da Árvore de Chamadas do incluem:

  • O botão Expandir Hot Path destaca um caminho de execução de função que contém muitos objetos que estão alocando memória. O algoritmo começa num nó que você seleciona e destaca o caminho com o maior número de alocações, orientando-o na sua investigação.
  • O botão Mostrar Caminho Quente mostra ou oculta os símbolos de chama que indicam quais nós fazem parte do caminho quente.

Captura de tela do caminho quente expandido.

Funções

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

Captura de ecrã da vista 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. Abaixo dos processos estão os módulos, e abaixo dos módulos estão as funções.

  • As seguintes colunas, que mostram as mesmas informações que nas vistas de Alocação e Árvore de Chamadas:

    • Total (Alocações)
    • Self (Alocações)
    • Tamanho total (bytes)
    • Tamanho próprio (Bytes)
    • Tamanho médio (bytes)

Coleção

A visualização da coleção mostra quantos objetos foram recolhidos ou retidos durante a recolha de lixo.

Captura de ecrã da vista Coleção.

As informações a seguir aparecem na visualização da Coleção .

  • A coluna GC mostra o ID dessa coleta de lixo no ciclo de vida do executável.
  • A coluna Geração mostra a Geração da coleta de lixo.
  • A coluna Tipo GC mostra o tipo desta recolha de lixo.
  • A coluna GC Reason mostra o motivo deste evento de recolha de lixo.
  • A coluna Duração da Pausa mostra o tempo que a execução foi bloqueada porque o recolhedor de lixo necessita de uso exclusivo do heap. Para uma coleta de lixo em segundo plano, esse valor é pequeno.
  • A coluna LOH Size mostra o tamanho da pilha de objetos grandes depois que o coletor de lixo foi executado.
  • A coluna Tamanho do POH mostra o tamanho da pilha de objeto fixo depois que o coletor de lixo foi executado.
  • A coluna Surv Finalizável (MB) mostra o número de MB de objetos que têm finalizadores (destruidores) que sobreviveram à coleta de lixo.
  • A coluna Objetos Afixados mostra o número de objetos fixados que essa coleta de lixo apresentou.
  • A coluna Recolhidos mostra o número de objetos que o coletor de lixo recolheu.
  • A coluna Sobreviveu mostra o número de objetos que sobreviveram depois que o coletor de lixo foi executado.

Quando seleciona uma linha, esta vista também mostra gráficos de setores que visualizam objetos coletados e sobreviventes por tipo.

Captura de ecrã de gráficos circulares na Vista Coleção.

Ferramentas de filtragem

As visualizações Allocations, Call Treee Functions contêm as opções Mostrar Apenas Meu Código e Mostrar Código Nativo e uma caixa de filtro.

  • Show Just My Code recolhe sistemas, frameworks e outros códigos que não são do utilizador em quadros de [Código Externo], de modo a concentrar-se apenas no seu código. Para obter mais informações, consulte Depurar código de usuário com Just My Code.
  • Mostrar código nativo mostra o código nativo dentro do destino de análise e pode incluir código de não-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.