Este projeto demonstra um caso simples de vazamento de memória (memory leak) em uma aplicação .NET 9. O objetivo é fornecer um cenário para estudar e praticar o uso das ferramentas de diagnóstico do .NET para identificação e análise de problemas relacionados ao consumo excessivo de memória.
O projeto consiste em uma única classe Program
, que implementa um vazamento de memória proposital. O vazamento ocorre através do acúmulo contínuo de arrays de bytes em uma lista. Isso demonstra como o crescimento descontrolado de objetos na memória pode afetar o desempenho da aplicação.
Certifique-se de ter as seguintes ferramentas instaladas:
-
Clone este repositório ou copie o código para um arquivo
Program.cs
. -
Navegue até o diretório do arquivo e execute os seguintes comandos:
# Compilar dotnet build -c Release # Executar dotnet run -c Release
-
O programa começará a alocar 1MB de memória a cada 100ms.
-
Para evitar um vazamento incontrolável, a lista
leakingList
será limpa e o coletor de lixo (GC.Collect
) será invocado ao atingir 1000MB alocados. -
Para interromper a execução, pressione
Ctrl + C
.
Antes de iniciar o monitoramento, identifique o ID do processo da aplicação com o comando:
dotnet-trace ps
Para acompanhar o consumo de memória da aplicação, utilize o comando:
dotnet-counters monitor -p <PID>
Substitua pelo ID do processo obtido no passo anterior.
Gerar um arquivo dump para análisar posteriormente:
dotnet-dump collect -p <PID>
Para analisar o dump, utilize:
dotnet-dump analyze <arquivo.dmp>
Liste os objetos acumulados na memória com:
dumpheap -stat
Para analisar um objeto específico na memória, use:
dumpheap -mt <endereço>
Para identificar a raiz do vazamento de memória, use o comando:
gcroot <endereço>