← Назад к вопросам
Для чего нужен Dispose?
1.2 Junior🔥 241 комментариев
#Основы C# и .NET#Память и Garbage Collector
Комментарии (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.