Estou fazendo uma hospedagem de alta densidade de aplicativos ASP.NET MVC 5 / WCF no Serviço de Aplicativo do Azure e os aplicativos inativos estão usando 600 ~ 1000MB de memória cada, o que é bastante, já que um despejo de memória revela que o heap do GC é apenas cerca de ~ 40MB completo. Eu suspeito que isso se deve ao servidor GC, então tentei desabilitá-lo seguindo https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/gcserver-element e adicionando
<gcServer enabled="false" />
ao meu web.config, mas isso não parece ter nenhum efeito como
GCSettings.IsServerGC
ainda está retornando verdadeiro. O que estou perdendo aqui?
EDITAR:
Usando o IIS normal, isso pode ser feito usando https://weblogs.asp.net/owscott/setting-an-aspnet-config-file-per-application-pool, mas no Serviço de Aplicativo do Azure, você não tem permissão para fazer isso.
fonte
Respostas:
Ok, primeiro de tudo, parece que você pode precisar depurar manualmente o uso da memória dos componentes usando GC.Collect (): https://docs.microsoft.com/en-us/dotnet/api/system.gc.collect ? view = netcore-3.1
Dessa forma, você poderá identificar uma parte específica do código que causa um vazamento de memória devido a uma coleta de lixo incorreta ou partes que estão usando determinadas bibliotecas de terceiros.
Depois de concluir esta parte tediosa, dependendo do que você acha que está causando o problema, considere usar um descarte manual do bloco de código utilizando
(using var item = new NameOfClass())
ou mesmo tentar implementarIDispose
as classes que o causam: https: / /docs.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-dispose .fonte