DA0021: taxa alta de coletas de lixo Gen 1
Identificação da Regra |
DA0021 |
Categoria |
uso do .NET Framework |
Analisando métodos |
Todos |
Message (Mensagem) |
Há uma taxa razoavelmente alta de ocorrer de coletas de lixo de Gen 1.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 |
Informações |
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 1 de coleta de lixo comparada à coleta de dados de geração 0.
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 1 ocorreram.Se objetos razoavelmente breves muitos sobrevivem à coleção de geração 0 mas podem ser coletado em uma coleção de geração 1, o custo de gerenciamento de memória podem se tornar excessivos.Para crise de vida intermediária obter mais informações, veja a postagem em boatos de desempenho do Mariani Rico no site do MSDN.
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.
Para entender o padrão do aplicativo de uso de memória gerenciado, analisar-lo que executa novamente medidas de tempo de vida do objeto de perfil e da solicitação de alocação de memória da.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 Heap de descoberto objeto grande.