DA0022: Alta taxa de coletas de lixo da geração 2

Identificação da regra

DA0022

<strong>Categoria</strong>

.Uso do NET Framework

Método de criação de perfil

Todos

Message (Mensagem)

Há uma relativamente alta taxa de ocorrência de coletas de lixo Gen 2. 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

Aviso

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 2 de coleta de lixo em comparação com a geração 0 e coletas de lixo 1 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 2 coletas de lixo estão ocorrendo. Bem comportado.Aplicativos do NET Framework terá mais de 5 vezes mais geração 1 coletas como coleções de geração 2. (Um fator de 10 x é provavelmente ideal).

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.

Uma alta proporção de coletas de lixo da geração 2 nem sempre é um problema. Talvez seja por design. Um aplicativo que aloca as estruturas de dados grande devem permanecer ativos por longos períodos durante a execução pode disparar a essa regra. Quando esse aplicativo está sob pressão de memória, poderá ser forçado para realizar coletas de lixo freqüente. Se o mais barata geração 0 e coletas de lixo da geração 1 podem recuperar apenas um pequeno volume gerenciado de memória, mais freqüentes coletas de lixo de geração 2 serão agendadas.

Há adicionais.Colunas de memória do CLR NET no modo de exibição de marcas que podem ajudar a identificam problemas de coleta de lixo. O % Time no GC coluna ajuda você a entender a sobrecarga de gerenciamento quanta memória está ocorrendo. Se seu aplicativo normalmente usa um número relativamente pequeno de objetos grandes, mas persistentes, coleções de geração 2 freqüentes não devem consumir quantidades excessivas de tempo de CPU. Se o aplicativo está sob pressão de memória porque a memória mais física (RAM) é necessárias regras relacionadas que avaliar a memória \ páginas/s os valores de coluna também poderá ser acionado.

Para entender o padrão do aplicativo de uso de memória gerenciada, profile executando novamente o perfil de alocação de memória a.NET e selecione a opção de criação de perfil de vida do objeto.

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.