DA0022: taxa alta de coletas de lixo Gen 2
Identificação da Regra |
DA0022 |
Categoria |
uso do .NET Framework |
Método de criação de perfil |
Todos |
Message (Mensagem) |
Há uma taxa razoavelmente alta de ocorrer de coletas de lixo de Gen 2.Se, por design, a maioria das estruturas de dados do programa são alocadas e mantidas por muito tempo, isso normalmente não é um problema.No entanto, se esse comportamento é não intencionais, o aplicativo pode manter objetos.Se você não tiver certeza, você pode coletar dados de alocação de memória de O objeto e informações de tempo de vida para entender o padrão de alocação de memória seu aplicativo. |
Tipo de regra |
Aviso |
Quando você analisa usando a amostragem, a memória .NET ou os métodos de contenção de recurso, você deve coletar pelo menos 10 amostras para disparar esta regra.
Causa
Os dados de desempenho do sistema que foram coletados durante a análise indica que uma proporção significativa de objetos da estrutura de memória for.NET esteve recuperada da geração 2 de coleta de lixo comparado com as coletas de lixo de geração 0 e a geração 1.
Descrição da Regra
Microsoft .NET framework Common Language Runtime (CLR) fornece um mecanismo automático de gerenciamento de memória que use um coletor de lixo para recuperar a memória dos objetos que o aplicativo já não usa.O coletor de lixo geração- é orientado por, com base na suposição que muitas alocações sejam efêmeros.As variáveis locais, por exemplo, devem ser breves.Inicie o recém-criado de objetos na geração gen 0 (0), e em andamento para a geração 1 quando sobrevive a uma execução de coleta de lixo, e transições finalmente a geração 2 se o aplicativo ainda o usa.
Os objetos da geração 0 são coletados com frequência e geralmente muito eficiente.Os objetos da geração 1 são coletados com menos frequência e menos eficiente.Finalmente, os objetos duradouros na geração 2 devem ser coletados mesmo com menos frequência.A coleção de geração 2, que é uma execução completa de coleta de lixo, também é a operação mais cara.
Esta regra é disparada quando proporcional coletas de lixo muitos de geração 2 estão ocorrendo.Bons aplicativos do .NET Framework terão mais de 5 vezes quantas coletas de lixo de geração 1 como coleções de geração 2. (Fator de 10x provavelmente é ideal.)
Como investigar um aviso
Clique duas vezes na mensagem na janela lista de erros para navegar na Exibição de marcas de dados de perfil.Localizar as colunas de Memória de .NET CLR \ # de coleções de Gen 0 e de Memória de .NET CLR \ # de coleções de Gen 1 .Determine se há etapas específicas de execução do programa onde a coleta de lixo está ocorrendo com mais frequência.Compare esses valores para a coluna de % De tempo em GC para ver se o padrão de alocações de memória gerenciadas está causando a sobrecarga de gerenciamento de memória excessiva.
Uma porcentagem alta de coletas de lixo de geração 2 nem sempre é um problema.Pode ser por design.Um aplicativo que atribui grandes estruturas de dados que devem permanecer ativos por longos períodos durante a execução pode disparar esta regra.Quando esse aplicativo estiver sob pressão de memória, poderá ser forçado para executar coletas de lixo frequentes.Se as coletas de lixo menos dispendiosa de geração 0 e a geração 1 podem recuperar apenas uma pequena quantidade de memória gerenciada, as coletas de lixo mais frequentes de geração 2 serão agendadas.
Há colunas adicionais de memória de .NET CLR na exibição das marcas que pode ajudar a identificar problemas de coleta de lixo.Ajuda da coluna de % De tempo em GC você a entender a quantidade de sobrecarga de gerenciamento de memória está ocorrendo.Se seu aplicativo normalmente usam um pequeno número razoavelmente grande de objetos persistentes, mas as coleções frequentes de geração 2 não devem consumir quantidades excessivas de CPU tempo.Se o aplicativo estiver sob pressão de memória porque mais memória física (RAM) for necessária, as regras relacionadas que avaliam os valores da coluna de Memória \ páginas/sec também podem acionar.
Para entender o padrão do aplicativo de uso de memória gerenciado, analisar-lo que executa novamente o perfil de alocação de memória da.NET e selecione o tempo de vida do objeto que analisa a opção.
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 Heap de descoberto objeto grande.