Пропуски Middle GC, IDisposable и производительность обновлено
Шаблон Dispose
Вопрос
Допишите стандартный шаблон освобождения ресурсов.
public void Dispose()
{
Dispose(true);
GC.__(1)__(this);
}
protected virtual void Dispose(bool __(2)__)
{
if (_disposed) return;
if (disposing) _stream.Dispose();
_disposed = true;
}
Попробуйте сами
Заполните пропуски по номерам.
1
2
Показать ответ и разбор
Коротко
Dispose(true) вызывается из Dispose(), тогда можно трогать управляемые объекты. Из финализатора вызывают Dispose(false): управляемые поля могут быть уже собраны.
Что в пропусках
1
SuppressFinalize
2
disposing
Разбор
Dispose(true) вызывается из Dispose(), тогда можно трогать управляемые объекты. Из финализатора вызывают Dispose(false): управляемые поля могут быть уже собраны. SuppressFinalize снимает объект с финализации.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Ещё по теме «GC, IDisposable и производительность»
- ArrayPool и аренда буферов
- Где выделит память лямбда в цикле
- Корни сборщика мусора
- Поколения сборщика мусора
- Когда реализовывать IDisposable
- Быстрый разбор большого ввода
- FizzBuzz с быстрым выводом
- Свой wc: строки, слова, максимальная длина