DA0024: Tempo excessivo de CPU de GC

Identificação da regra

DA0024

<strong>Categoria</strong>

.Uso do NET Framework

Método de criação de perfil

Todos

Message (Mensagem)

% De tempo no GC é muito alto. Há uma quantidade excessiva de sobrecarga de coleta de lixo.

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 a quantidade de tempo gasto na coleta de lixo excessivamente alta em comparação com o tempo de processamento total do aplicativo.

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.

Essa regra é acionado quando a quantidade de tempo gasto na coleta de lixo está excessivamente alta em comparação com o tempo de processamento total do aplicativo.

ObservaçãoObservação

Quando a proporção de tempo gasto na coleta de lixo é significativo, mas não excessivos em comparação com o tempo de processamento total do aplicativo, o DA0023: Alto tempo de CPU de GC é acionado de aviso, em vez de regra.

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 o CLR Memory\% Time no GC coluna. Determine se existem fases específicas da execução do programa onde a sobrecarga de coleta de lixo de memória gerenciada é maior do que outras fases. Compare os valores dos % Time no GC considera a taxa de coleta de lixo é relatado no n º de coletas de Gen 0, n º de coletas de Gen 1, n º de coletas de Gen 2 valores.

O % Time no valor de GC tenta relatar o período de tempo que um aplicativo gasta executando proporcional à quantidade total de processamento de coleta de lixo. Lembre-se de que há circunstâncias, quando o % Time no valor de GC pode relatar um valor muito elevado, mas não é por causa de coleta de lixo excessiva. Para obter mais informações sobre a maneira como o % Time no valor de GC é calculado, consulte o Diferença entre Perf dados relatados por ferramentas diferentes – 4 entrada do Maoni's Weblog no MSDN. Se ocorrem as falhas de página ou o aplicativo é superado por outros trabalhos de prioridade mais alto na máquina durante a coleta de lixo, o % Time no contador de GC refletirá a esses atrasos.