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.
Na maioria dos casos, o coletor de lixo pode determinar o melhor momento para executar uma coleta e você deve deixá-la ser executada de forma independente. Há situações raras em que uma coleção forçada pode melhorar o desempenho do aplicativo. Nesses casos, você pode induzir a coleta de lixo usando o GC.Collect método para forçar uma coleta de lixo.
Use o GC.Collect método quando houver uma redução significativa na quantidade de memória que está sendo usada em um ponto específico no código do aplicativo. Por exemplo, se o aplicativo usar uma caixa de diálogo complexa que tenha vários controles, chamar Collect quando a caixa de diálogo for fechada poderá melhorar o desempenho recuperando imediatamente a memória usada pela caixa de diálogo. Certifique-se de que seu aplicativo não esteja induzindo a coleta de lixo com muita frequência, pois isso poderá diminuir o desempenho se o coletor de lixo estiver tentando recuperar objetos em momentos não ideais. Você pode fornecer um valor de enumeração GCCollectionMode.Optimized para o método Collect para coletar apenas quando a coleta for produtiva, conforme discutido na próxima seção.
Modo de coleta de GC
Você pode usar uma das sobrecargas do método GC.Collect que inclui um valor GCCollectionMode para especificar o comportamento de uma coleta forçada da seguinte maneira.
Valor GCCollectionMode |
Descrição |
---|---|
Default | Usa a configuração de coleta de lixo padrão para a versão em execução do .NET. |
Forced | Força a coleta de lixo a ocorrer imediatamente. Isso é equivalente a chamar a sobrecarga GC.Collect(). Isso resulta em uma coleta de bloqueio total de todas as gerações. Você também pode compactar o heap de objeto grande definindo a propriedade GCSettings.LargeObjectHeapCompactionMode como GCLargeObjectHeapCompactionMode.CompactOnce antes de forçar uma coleta de lixo de bloqueio completo imediata. |
Optimized | Permite que o coletor de lixo determine se a hora atual é ideal para recuperar objetos. O coletor de lixo poderia determinar que uma coleção não seria produtiva o suficiente para ser justificada, caso em que retornará sem recuperar objetos. |
Coletas de bloqueio ou em segundo plano
Você pode chamar a sobrecarga de método GC.Collect(Int32, GCCollectionMode, Boolean) para especificar se uma coleta induzida realiza o bloqueio ou não. O tipo de coleta realizada depende de uma combinação dos parâmetros do método mode
e blocking
. mode
é um membro da GCCollectionMode enumeração e blocking
é um Boolean valor. A tabela a seguir resume a interação dos argumentos mode
e blocking
.
mode |
blocking = true |
blocking = false |
---|---|---|
Forced ou Default | Uma coleção de bloqueio é executada assim que possível. Se uma coleção em segundo plano estiver em andamento e a geração for 0 ou 1, o Collect(Int32, GCCollectionMode, Boolean) método disparará imediatamente uma coleção de bloqueios e retornará quando a coleção for concluída. Se uma coleta em segundo plano estiver em andamento e o parâmetro generation for 2, o método aguardará até que a coleta em segundo plano seja concluída, disparará uma coleta de bloqueio de geração 2 e retornará. |
Uma coleta é realizada assim que possível. O Collect(Int32, GCCollectionMode, Boolean) método solicita uma coleção em segundo plano, mas isso não é garantido; dependendo das circunstâncias, uma coleção de bloqueio ainda pode ser executada. Se uma coleção em segundo plano já estiver em andamento, o método retornará imediatamente. |
Optimized | Uma coleta de bloqueio pode ser executada, dependendo do estado do coletor de lixo e do parâmetro generation . O coletor de lixo tenta fornecer um desempenho ideal. |
Uma coleta pode ser executada, dependendo do estado do coletor de lixo. O Collect(Int32, GCCollectionMode, Boolean) método solicita uma coleção em segundo plano, mas isso não é garantido; dependendo das circunstâncias, uma coleção de bloqueio ainda pode ser executada. O coletor de lixo tenta fornecer um desempenho ideal. Se uma coleção em segundo plano já estiver em andamento, o método retornará imediatamente. |