Выбор ответа Middle GC, IDisposable и производительность спрашивают часто обновлено
Утечки памяти в управляемом коде
Вопрос
Какой из сценариев приводит к утечке памяти в .NET, несмотря на GC?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Статический Dictionary-кеш, который никогда не чистится. GC собирает только недостижимые объекты, а статическое поле это корень, живущий всё время процесса.
Варианты ответа
- Локальный
List<T>с миллионом элементов внутри метода - Цикл ссылок: объект A ссылается на B, а B ссылается на A
- Отсутствие вызова
GC.Collect()в конце каждого запроса - Статический
Dictionary-кеш, который никогда не чиститсяправильный ответ
Разбор
GC собирает только недостижимые объекты, а статическое поле это корень, живущий всё время процесса. Кеш без ограничения размера будет расти бесконечно. Локальный список станет мусором после выхода из метода. Циклические ссылки GC собирает без проблем: он трассирует от корней, а не считает ссылки. GC.Collect вручную вызывать не нужно. Другие типичные утечки: забытые подписки на события, таймеры, неосвобождённые неуправляемые ресурсы.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.