Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Para recuperar objetos, o coletor de lixo (GC) deve interromper todos os threads em execução em um aplicativo. O período durante o qual o coletor de lixo está ativo é conhecido como sua latência.
Em algumas situações, como quando um aplicativo recupera dados ou exibe conteúdo, uma coleta de lixo completa pode ocorrer em um momento crítico e impedir o desempenho. Você pode ajustar a intrusividade do coletor de lixo definindo a GCSettings.LatencyMode propriedade como um dos System.Runtime.GCLatencyMode valores.
Configurações de baixa latência
Usar uma configuração de latência "baixa" significa que o coletor de lixo se intromete menos em seu aplicativo. A coleta de lixo é mais conservadora quanto à recuperação de memória.
A System.Runtime.GCLatencyMode enumeração fornece duas configurações de baixa latência:
GCLatencyMode.LowLatency suprime coleções de geração 2 e executa apenas coleções de geração 0 e 1. Ele só pode ser usado por curtos períodos de tempo. Durante períodos mais longos, se o sistema estiver sob pressão de memória, o coletor de lixo disparará uma coleta, que poderá pausar brevemente o aplicativo e interromper uma operação crítica em tempo real. Essa configuração está disponível apenas para coleta de lixo da estação de trabalho.
GCLatencyMode.SustainedLowLatency suprime coleções de primeiro plano de geração 2 e executa apenas coleções de geração 0, 1 e 2 de segundo plano. Ele pode ser utilizado por períodos mais longos e está disponível para coleta de lixo tanto em workstations quanto em servidores. Essa configuração não poderá ser usada se a coleta de lixo em segundo plano estiver desabilitada.
Durante períodos de baixa latência, as coleções de geração 2 são suprimidas, a menos que o seguinte ocorra:
O sistema recebe uma notificação de memória baixa do sistema operacional.
O código do aplicativo induz uma coleção chamando o GC.Collect método e especificando 2 para o
generation
parâmetro.
Cenários
A tabela a seguir lista os cenários de aplicativo para usar os GCLatencyMode valores:
Modo de latência | Cenários de aplicativos |
---|---|
Batch | Para aplicativos que não têm operações de interface do usuário ou do servidor. Quando a coleta de lixo em segundo plano é desabilitada, esse é o modo padrão para coleta de lixo de servidor e estação de trabalho. Batch O modo também substitui a configuração gcConcurrent , ou seja, impede coleções em segundo plano ou simultâneas. |
Interactive | Para a maioria dos aplicativos que têm uma interface do usuário. Esse é o modo padrão para coleta de lixo de servidor e estação de trabalho. No entanto, se um aplicativo estiver hospedado, as configurações do coletor de lixo do processo de hospedagem têm precedência. |
LowLatency | Para aplicativos que têm operações de curto prazo e sensíveis ao tempo durante as quais as interrupções do coletor de lixo podem causar interrupções. Por exemplo, aplicativos que renderizam animações ou funções de aquisição de dados. |
SustainedLowLatency | Para aplicativos que têm operações sensíveis ao tempo, de duração contida, mas potencialmente mais longa, em que interrupções do coletor de lixo podem ser disruptivas. Por exemplo, aplicativos que precisam de tempos de resposta rápidos à medida que os dados do mercado mudam durante o horário de negociação. Esse modo resulta em um tamanho maior do heap gerenciado do que outros modos. Como ele não compacta o heap gerenciado, é possível maior fragmentação. Verifique se há memória suficiente disponível. |
Diretrizes para usar a baixa latência
Ao usar o modo GCLatencyMode.LowLatency , considere as seguintes diretrizes:
Mantenha o período de tempo em baixa latência o mais curto possível.
Evite alocar altas quantidades de memória durante períodos de baixa latência. Notificações de memória baixas podem ocorrer porque a coleta de lixo recupera menos objetos.
No modo de baixa latência, minimize o número de alocações, principalmente alocações em heap de objetos grandes e objetos fixados.
Esteja atento a ameaças que possam ser alocadas. Como a configuração da propriedade LatencyMode é para todo o processo, exceções OutOfMemoryException podem ser geradas em qualquer thread que esteja alocando.
Encapsular o código de baixa latência em regiões de execução restritas. Para obter mais informações, consulte Regiões de execução restritas.
Você pode forçar coletas da geração 2 durante um período de baixa latência ao chamar o método GC.Collect(Int32, GCCollectionMode).