Выбор ответа Middle GC, IDisposable и производительность обновлено
Зачем GC.SuppressFinalize в Dispose
Вопрос
Зачем в Dispose() вызывают GC.SuppressFinalize(this)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Чтобы убрать объект из очереди финализации: ресурсы уже свободны. Если ресурсы освобождены явно, финализатор становится лишним.
Варианты ответа
- Чтобы немедленно освободить память объекта, не дожидаясь GC
- Чтобы убрать объект из очереди финализации: ресурсы уже свободныправильный ответ
- Чтобы запретить повторный вызов
Disposeу того же объекта - Чтобы GC не собрал объект, пока он ещё используется в методе
Разбор
Если ресурсы освобождены явно, финализатор становится лишним. SuppressFinalize снимает регистрацию, и объект соберётся за одну сборку, без очереди финализации. Память сразу не освобождается, это делает GC позже. От повторного Dispose защищает флаг _disposed. Чтобы объект не собрали раньше времени, используют GC.KeepAlive.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.