Выбор ответа Middle GC, IDisposable и производительность спрашивают часто обновлено

Утечки памяти в управляемом коде

Вопрос

Какой из сценариев приводит к утечке памяти в .NET, несмотря на GC?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Статический Dictionary-кеш, который никогда не чистится. GC собирает только недостижимые объекты, а статическое поле это корень, живущий всё время процесса.

Варианты ответа

  1. Локальный List<T> с миллионом элементов внутри метода
  2. Цикл ссылок: объект A ссылается на B, а B ссылается на A
  3. Отсутствие вызова GC.Collect() в конце каждого запроса
  4. Статический Dictionary-кеш, который никогда не чиститсяправильный ответ

Разбор

GC собирает только недостижимые объекты, а статическое поле это корень, живущий всё время процесса. Кеш без ограничения размера будет расти бесконечно. Локальный список станет мусором после выхода из метода. Циклические ссылки GC собирает без проблем: он трассирует от корней, а не считает ссылки. GC.Collect вручную вызывать не нужно. Другие типичные утечки: забытые подписки на события, таймеры, неосвобождённые неуправляемые ресурсы.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.