Configurar a coleta de lixo do .NET
Para um bom desempenho, é importante configurar a coleta de lixo do .NET para o processo de silo da maneira correta. A melhor combinação de configurações com base nas descobertas da equipe é definir gcServer=true
e gcConcurrent=true
. Você pode configurar esses valores no projeto C# (.csproj) ou um app.config. Para obter mais informações, consulte Variantes da coleta de lixo.
.NET Core e .NET 5+
Não há suporte para esse método com projetos de estilo do SDK compilados em relação ao .NET Framework completo
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
</PropertyGroup>
.NET Framework
Os projetos de estilo do SDK que são compilados no .NET Framework completo ainda devem usar esse estilo de configuração, considere um arquivo XML app.config de exemplo:
<configuration>
<runtime>
<gcServer enabled="true"/>
<gcConcurrent enabled="true"/>
</runtime>
</configuration>
No entanto, isso não será tão fácil de fazer se um silo for executado como parte de uma Função de Trabalho do Azure, que, por padrão, é configurada para usar a coleta de lixo da estação de trabalho. Há uma postagem relevante no blog que discute como definir a mesma configuração para uma Função de Trabalho do Azure, consulte Modo de coleta de lixo do Servidor no Azure.
Importante
A coleta de lixo do servidor está disponível somente em computadores multiprocessadores. Portanto, mesmo que você configure a coleta de lixo por meio do arquivo .csproj do aplicativo ou por meio dos scripts na postagem de blog referida, se o silo estiver em execução em um computador (virtual) com um único núcleo, você não obterá os benefícios de gcServer=true
. Para obter mais informações, consulte Observações de GCSettings.IsServerGC.