Configurar a coleta de lixo do .NET
Para um bom desempenho, é importante configurar a coleta de lixo .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 em um app.config. Para obter mais informações, consulte Sabores da coleta de lixo.
.NET Core e .NET 5+
Este método não é suportado com projetos de estilo SDK compilando em relação ao .NET Framework completo
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
</PropertyGroup>
.NET Framework
Projetos de estilo SDK compilados em relação ao .NET Framework completo ainda devem usar esse estilo de configuração, considere um exemplo de arquivo XML app.config :
<configuration>
<runtime>
<gcServer enabled="true"/>
<gcConcurrent enabled="true"/>
</runtime>
</configuration>
No entanto, isso não é 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 o GC da estação de trabalho. Há uma postagem de blog relevante 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 apenas em computadores com vários processadores. Portanto, mesmo se você configurar 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 sendo executado em uma máquina (virtual) com um único núcleo, você não obterá os benefícios do gcServer=true
. Para obter mais informações, consulte GCSettings.IsServerGC remarks.