Как отключить сервер G C в ASP. NET Framework Framework, работающем в Azure Служба приложений - PullRequest
8 голосов
/ 28 февраля 2020

Я работаю на хостинге с высокой плотностью ASP. NET MVC 5 / WCF приложений в Azure Службе приложений, и незанятые приложения используют 600 ~ 1000 МБ памяти каждое, что довольно много, учитывая, что дамп памяти показывает, что куча G C заполнена только на ~ 40 МБ. Я подозреваю, что это связано с сервером G C, поэтому я попытался отключить его, выполнив https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/gcserver-element и добавив

<gcServer enabled="false" />

в мой web.config, но это не похоже на иметь любой эффект, так как

GCSettings.IsServerGC

все еще возвращает true. Чего мне здесь не хватает?

РЕДАКТИРОВАТЬ:

Используя обычный IIS, это можно сделать с помощью https://weblogs.asp.net/owscott/setting-an-aspnet-config-file-per-application-pool, но в Azure службе приложений вам не хватает разрешений на сделай это.

1 Ответ

0 голосов
/ 07 марта 2020

Хорошо, во-первых, кажется, что вам, возможно, придется вручную отлаживать использование памяти компонентами, используя G C .Collect (): https://docs.microsoft.com/en-us/dotnet/api/system.gc.collect?view=netcore-3.1

Таким образом возможно, вы сможете точно определить определенную c часть кода, которая вызывает утечку памяти из-за неправильной сборки мусора или части, использующие определенные сторонние библиотеки.

Как только вы закончите с этим Это довольно утомительная часть, поэтому, в зависимости от того, что, по вашему мнению, является причиной проблемы, вы должны рассмотреть возможность использования ручного удаления блока кода с использованием (using var item = new NameOfClass()) или даже попытки реализовать IDispose для классов, которые его вызывают: https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/implementing-dispose.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...