Partilhar via


Coleta de lixo da estação de trabalho e do servidor

O coletor de lixo é autoajustável e pode trabalhar em uma ampla variedade de cenários. No entanto, você pode definir o tipo de coleta de lixo com base nas características da carga de trabalho. O CLR fornece os seguintes tipos de coleta de lixo:

  • GC (Coleta de lixo da estação de trabalho), que foi projetada para aplicativos cliente. É o sabor GC padrão para aplicativos autônomos. Para aplicativos hospedados, por exemplo, aqueles hospedados por ASP.NET, o host determina o sabor de GC padrão.

    A coleta de lixo da estação de trabalho pode ser simultânea ou não simultânea. A coleta de lixo simultânea (ou em segundo plano) permite que threads gerenciados continuem as operações durante uma coleta de lixo. A coleta de lixo em segundo plano substitui a coleta de lixo simultânea no .NET Framework 4 e versões posteriores.

  • Coleta de lixo de servidor, que se destina a aplicativos de servidor que precisam de alta taxa de transferência e escalabilidade.

    • No .NET Core, a coleta de lixo do servidor pode ser não simultânea ou em segundo plano.

    • No .NET Framework 4.5 e versões posteriores, a coleta de lixo do servidor pode ser não simultânea ou em segundo plano. No .NET Framework 4 e versões anteriores, a coleta de lixo do servidor não é simultânea.

A ilustração a seguir mostra os threads dedicados que executam a coleta de lixo em um servidor:

Server Garbage Collection Threads

Considerações de desempenho

Estação de trabalho GC

A seguir estão as considerações de threading e desempenho para a coleta de lixo da estação de trabalho:

  • A coleta ocorre no thread do usuário que disparou a coleta de lixo e permanece na mesma prioridade. Como os threads de usuário normalmente são executados com prioridade normal, o coletor de lixo (que é executado em um thread de prioridade normal) deve competir com outros threads pelo tempo de CPU. (Os threads que executam código nativo não são suspensos na coleta de lixo do servidor ou da estação de trabalho.)

  • A coleta de lixo da estação de trabalho é sempre usada em um computador que tenha apenas uma CPU lógica, independentemente da definição de configuração.

GC do servidor

A seguir estão as considerações de threading e desempenho para a coleta de lixo do servidor:

  • A coleção ocorre em vários threads dedicados. No Windows, esses threads são executados no THREAD_PRIORITY_HIGHEST nível de prioridade.

  • Um heap e um thread dedicado para executar a coleta de lixo são fornecidos para cada CPU lógica, e os heaps são coletados ao mesmo tempo. Cada heap contém um heap de objeto pequeno e um heap de objeto grande, e todos os heaps podem ser acessados pelo código do usuário. Objetos em diferentes pilhas podem se referir uns aos outros.

  • Como vários threads de coleta de lixo funcionam juntos, a coleta de lixo do servidor é mais rápida do que a coleta de lixo da estação de trabalho no mesmo monte de tamanho.

  • A coleta de lixo do servidor geralmente tem segmentos de tamanho maior. No entanto, isso é apenas uma generalização: o tamanho do segmento é específico da implementação e está sujeito a alterações. Não faça suposições sobre o tamanho dos segmentos alocados pelo coletor de lixo ao ajustar seu aplicativo.

  • A coleta de lixo do servidor pode exigir muitos recursos. Por exemplo, imagine que há 12 processos que usam GC de servidor em execução em um computador que tem quatro CPUs lógicas. Se todos os processos coletarem lixo ao mesmo tempo, eles interfeririam uns nos outros, pois haveria 12 threads agendados na mesma CPU lógica. Se os processos estiverem ativos, não é uma boa ideia fazer com que todos usem o GC do servidor.

Se você estiver executando centenas de instâncias de um aplicativo, considere usar a coleta de lixo da estação de trabalho com a coleta de lixo simultânea desabilitada. Isso resultará em menos mudança de contexto, o que pode melhorar o desempenho.

Consulte também