Карточка Junior GC, IDisposable и производительность спрашивают часто обновлено

Когда реализовывать IDisposable

Вопрос

Когда классу нужен IDisposable?

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

Ответьте про себя или вслух, потом откройте ответ и сверьтесь.

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

Коротко

- Класс владеет неуправляемым ресурсом (дескриптор, сокет) или другими IDisposable (поток, DbContext, HttpResponseMessage). - Нужно детерминированно отписаться от событий или остановить таймер. Потребитель вызывает Dispose через using.

Ответ

  • Класс владеет неуправляемым ресурсом (дескриптор, сокет) или другими IDisposable (поток, DbContext, HttpResponseMessage).
  • Нужно детерминированно отписаться от событий или остановить таймер. Потребитель вызывает Dispose через using. Повторный вызов Dispose должен быть безопасным.

Разбор

IDisposable не освобождает управляемую память, это делает GC. Он про ресурсы, которые GC не знает, как освободить вовремя.

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

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