DA0021: Alta taxa de coletas de lixo da Gen 1

Identificação da regra

DA0021

<strong>Categoria</strong>

.Uso do NET Framework

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 programa está alocada e mantida por um longo tempo, isso não é normalmente um problema. No entanto, se esse comportamento não intencional, seu aplicativo pode Fixando 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 entender 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 amostras de pelo menos 10 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 a coleta de dados de geração.

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 a 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 freqüentemente 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 uma coleta de lixo completa, também é mais cara.

Esta regra dispara quando proporcionalmente muitos geração 1 coletas ocorreram. Se muitos objetos relativamente curta duração sobrevivem a coleta de geração 0, mas são capazes de ser 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 lançar dados sobre o desempenho de Mariani de Rico no site do MSDN.

Como investigar um aviso.

Clique duas vezes na mensagem na janela lista de erros para navegar até o Exibição de marcas de 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.