Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Для чего нужен Dispose?
Dispose нужен для немедленного освобождения неуправляемых ресурсов. Сборщик мусора управляет только памятью, а файлы, соединения с БД и сокеты требуют явного закрытия.
Проблема
Когда ты открываешь файл, операционная система выделяет дескриптор. Сборщик мусора может удалить объект, но файл останется открытым. Это приводит к утечкам ресурсов.
Решение — IDisposable
public class FileManager : IDisposable
{
private FileStream _file;
public void Dispose()
{
_file?.Dispose();
}
}
using (var mgr = new FileManager())
{
// работаем
} // Dispose гарантировано вызовется
Правильная реализация
public class Resource : IDisposable
{
private bool _disposed;
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
// управляемые ресурсы
}
// неуправляемые ресурсы
_disposed = true;
}
}
~Resource() => Dispose(false);
}
Когда критично
- Файлы
- Соединения с БД
- Сетевые сокеты
- Таймеры
Всегда используй using statement для гарантированного вызова Dispose.
Похожие вопросы
- Как развивался в программировании?
- В чём разница между Transient, Scoped и Singleton?
- Как реализуется обработка исключений?
- Приведи пример join
- Назови пример значимого типа
- Что такое неуправляемые ресурсы?
- Что изучал в последнее время?
- Приведи явный пример реализации паттерна строитель
- Приведи пример полиморфизма
- В чём разница между Action и Func?
- Какие знаешь виды приведения типов?
- Каким типом данных является DateTime?
- Взаимодействовал ли с заказчиком напрямую?
- Расскажи о своих проектах
- Какой фреймворк использовал для тестирования?
- Что делает PATCH в REST?
- Что такое scheduler?
- Сколько интерфейсов может реализовать класс?
- В чём разница между Boxing и Unboxing?
- Какие знаешь виды полиморфизма?