Compartilhar via


DA0021: Alta taxa de coletas de lixo da Gen 1

Identificação da regra

DA0021

<strong>Categoria</strong>

.NET Framework uso

Métodos de criação de perfil

Todos

Message (Mensagem)

Há uma relativamente alta taxa de ocorrência de coletas de lixo Gen 1.Se, por design, a maioria das estruturas de dados do seu programa é alocada e mantida por um longo tempo, isso não é normalmente um problema.No entanto, se esse comportamento não intencional, seu aplicativo pode ser fixação de objetos.Se você não tiver certeza, você pode coletar.NET memória alocação dados e o objeto de tempo de vida informações para compreender o padrão de alocação de memória, que seu aplicativo usa.

Tipo de regra

Informações

Quando você cria o perfil usando a amostragem.NET métodos de contenção de memória ou recursos, você deve coletar pelo menos 10 amostras para disparar esta regra.

Causa

Os dados de desempenho do sistema que foram coletados durante perfilação indicam que uma parte significativa da memória para.Objetos do NET Framework foi recuperado na geração 1 de coleta de lixo em comparação com coleta da geração 0 de dados.

Descrição da regra

A Microsoft.NET common language runtime (CLR) fornece um mecanismo de gerenciamento automático de memória que usa um coletor de lixo para recuperar memória de objetos que o aplicativo não usa mais.O coletor de lixo é orientado a geração, com base na suposição de que muitas alocações são de curta duração.Variáveis locais, por exemplo, devem ser curta duração.Objetos recém-criados inicie na geração 0 (Ger 0) e, em seguida, de andamento para a geração 1 quando eles sobrevivem uma coleta de lixo executar e, finalmente a transição para a geração 2 se o aplicativo ainda usa-los.

Objetos na geração 0 são coletados com freqüência e geralmente muito eficiente.Objetos na geração 1 são coletados com menos freqüência e menos eficiente.Finalmente, longa vida objetos na geração 2 devem ser coletados com ainda menos freqüência.Coleta de geração 2, que é executar coleta de lixo completa, também é a operação mais cara.

Esta regra dispara quando proporcionalmente geração muitas coletas de 1 lixo ocorreram.Se muitos objetos relativamente curta duração sobrevivem a coleta de geração 0, mas são capazes de serem coletados em uma coleção de geração 1, o custo do gerenciamento de memória pode se tornar excessivo.Para obter mais informações, consulte o crise Mid-life postar em dados sobre o desempenho de Mariani o Rico no site do MSDN.

Como investigar um aviso

Clique duas vezes a mensagem na janela lista de erros para navegar até o Exibição de marcas dos dados de criação de perfil.Encontrar o .NET CLR Memory\ # de coletas de Gen 0 e .NET Memory\ # de Gen 1 coleções do CLR colunas.Determine se existem fases específicas da execução do programa onde a coleta de lixo está ocorrendo com mais freqüência.Compare esses valores com o % Time no GC coluna para ver se o padrão de alocações de memória gerenciada está causando a sobrecarga de gerenciamento de memória excessiva.

Para entender o padrão do aplicativo de uso de memória gerenciada, o perfil-lo funcionando novamente medidas de tempo de vida do objeto de perfil e solicitação de alocação de memória de a.NET.

Para obter informações sobre como melhorar o desempenho de coleta de lixo, consulte Noções básicas do coletor de lixo e dicas de desempenho no site da Microsoft.Para obter informações sobre a sobrecarga de coleta de lixo automática, consulte Revelada de Heap de objeto grande.