Modos de latência
Para recuperar os objetos, o coletor de lixo deve interromper todos os segmentos de execução do aplicativo. Em algumas situações, como, por exemplo, quando um aplicativo recupera os dados ou exibe o conteúdo, a coleta de lixo completa pode ocorrer em um momento crítico e prejudicam o desempenho. Você pode ajustar a intrusiveness do coletor de lixo, definindo a GCSettings.LatencyMode propriedade da System.Runtime.GCLatencyMode valores.
Latência refere-se ao tempo que o coletor de lixo intrudes em seu aplicativo. Durante períodos de baixa latência, o coletor de lixo é mais conservadora e menos intrusivo na recuperação de objetos. Recomendamos que você use o GCLatencyMode.LowLatency modo somente para o curto período de tempo quando ela for necessária. Caso contrário, se o sistema está sob pressão de memória, o coletor de lixo irá disparar uma coleção, que rapidamente pode pausar o aplicativo e interromper uma operação de tempo crítica.
Durante períodos de baixa latência, coleções de geração 2 são suprimidas, a menos que ocorre o seguinte:
O sistema recebe uma notificação de pouca memória do sistema operacional.
O código do aplicativo induzir a uma coleção, chamando o GC.Collect método e especificando a 2 para o generation parâmetro.
Você deve usar o modo de latência com aplicativos que incluem um bloco de código que é executado por um breve período de tempo e deve ser executado com interrupções mínimas, do tempo de execução. Embora o LowLatency modo é projetado para ser usado em cenários em que há algumas restrições de tempo, ele não se destina a ser uma solução para cenários onde há restrições em tempo real estrito.
A tabela a seguir lista os cenários de aplicativo que o GCLatencyMode os valores são adequados de loop for
Modo de latência |
Cenários de aplicativo |
---|---|
Para aplicativos que não têm interface de usuário ou as operações do lado do servidor. |
|
Para a maioria dos aplicativos que possuem uma interface do usuário. |
|
Para aplicativos que têm as operações de curto prazo, sensíveis ao tempo durante o qual as interrupções do coletor de lixo poderiam ser prejudicial. Por exemplo, aplicativos que oferecem funções de aquisição de dados ou de processamento de animação. |
Modos de coleta de lixo do padrão
Se o LatencyMode propriedade não for especificado, o modo padrão é coleta de lixo de estação de trabalho simultânea. O modo depende do valor de duas definições de configuração de tempo de execução:
-
Se habilitada, essa configuração especifica que o common language runtime executa a coleta de lixo da estação de trabalho em um thread separado para dar suporte a operações simultâneas. Essa configuração é ativada por padrão.
-
Se habilitada, essa configuração especifica o que o common language runtime executa a coleta de lixo do servidor; Caso contrário, ele executa a coleta de lixo da estação de trabalho. Você pode habilitar a coleta de lixo do servidor somente em computadores com dois ou mais processadores. Ele não está habilitado por padrão.
Se essa configuração estiver ativada, <gcConcurrent> é automaticamente desativada.
Os valores padrão para GCLatencyMode são da seguinte maneira:
InteractiveQuando <gcConcurrent> está habilitado e <gcServer> está desabilitada.
BatchQuando <gcConcurrent> for desativado, ou <gcServer> está habilitado.
Observação
Não há suporte para a coleta de lixo simultâneas em aplicativos em execução no WOW64 x 86 emulador em sistemas de 64 bits que implementam a arquitetura Intel Itanium (anteriormente chamado de IA-64).
Diretrizes para o uso de baixa latência
Quando você usa LowLatency modo, considere as seguintes diretrizes:
Mantenha o período de tempo de baixa latência mais breve possível.
Evite alocando altas quantidades de memória durante períodos de baixa latência. Notificações de pouca memória podem ocorrer porque os objetos menos recupera a coleta de lixo.
No modo de baixa latência, minimize o número de alocações que fazer em determinado alocações para a pilha de objetos grandes e objetos fixados.
Lembre-se de segmentos que poderiam estar alocando. Porque o LatencyMode configuração da propriedade é de todo o processo, você poderia gerar uma OutOfMemoryException em qualquer segmento que pode estar alocando.
Encapsule o código de baixa latência em regiões de execução restrita (para obter mais informações, consulte Regiões de execução restrita).
Você pode forçar a coleções de geração 2 durante um período de baixa latência, chamando o GC.Collect(Int32, GCCollectionMode) método.
Consulte também
Tarefas
Como: Desativar a coleta de lixo concorrente