Принудительная сборка мусора веб-приложение .net core 3.0

#c# #.net #asp.net-core

#c# #.net #asp.net-core

Вопрос:

У нас есть веб-приложение .net core 3.0, размещенное в службах приложений Azure. Мы столкнулись с проблемой, когда использование памяти достигает верхней границы плана приложения.

Хорошая ли идея создать задание в BackgroundService, которое будет отслеживать использование ресурсов и принудительно собирать мусор, когда использование памяти достигает 80-90% от общего объема использования памяти?

Комментарии:

1. Может быть, лучше найти причины утечек памяти в вашем приложении?

2. Короткий ответ: «Нет, это не очень хорошая идея». Чем длиннее ответ — профилируйте код. Бывают случаи, когда явные вызовы GC.Collect являются хорошей идеей, но они относительно редки.

3. Никогда * не рекомендуется выполнять сборку мусора вручную в управляемой среде выполнения. * Если вы точно не знаете, что вы делаете и почему вы это делаете, в этот момент вам не нужно задавать этот вопрос

4. Единственное, что я могу порекомендовать, это профилировать ваш код , посмотреть, какие части используют непомерные объемы памяти, и попытаться улучшить этот код, чтобы использовать меньше. Если это не сработает, на самом деле нет другого варианта, кроме как заплатить за план приложения с большим объемом памяти

5. Я не обнаружил явных утечек памяти, профилирующих код, и мы пытаемся использовать лучшие практики (использование блоков, временных объектов жизненного цикла и т. Д.). Скорее всего, наша система перегружена, и лучший вариант — просто увеличить план памяти. Мое предложение состояло в том, чтобы как-то обмануть, и я подумал, возможно ли это с помощью явного вызова GC. Кроме того, я только что прочитал, что среда clr запускает GC, когда в системе низкий уровень памяти, поэтому моя идея действительно бесполезна. Спасибо всем за помощь