#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, когда в системе низкий уровень памяти, поэтому моя идея действительно бесполезна. Спасибо всем за помощь