Оглавление:
Определение - что означает «утилизировать»?
В контексте C # dispose - это метод объекта, вызываемый для выполнения кода, необходимого для очистки памяти, а также для освобождения и сброса неуправляемых ресурсов, таких как дескрипторы файлов и соединения с базой данных. Dispose повышает производительность и оптимизирует память за счет освобождения неуправляемых объектов и дефицитных ресурсов, таких как дескрипторы графического интерфейса устройства (GDI), используемые в приложениях с ограниченным пространством Windows.
Метод Dispose, предоставляемый интерфейсом IDisposable, реализует вызовы Dispose. Шаблон Dispose предназначен для своевременной и предсказуемой очистки, предотвращения временных утечек памяти и утилизации ресурсов.
Техопедия объясняет Распоряжаться
.NET Framework облегчает сборку мусора (GC), управляет памятью и ресурсами объекта и возвращает недопустимые ссылки на память объекта, вызывая Finalize - недетерминированный метод. Метод Dispose управляет временем жизни экземпляров памяти объекта и обеспечивает явное управление очисткой памяти по сравнению с неявной очисткой памяти в Finalize. Dispose может быть вызван, даже если существуют другие экземпляры объекта памяти, тогда как Finalize может быть вызван только после уничтожения последнего объекта памяти.
Правила утилизации следующие:
- Используется для неуправляемых ресурсов, требующих немедленного освобождения после использования.
- Если Dispose не вызывается, должен быть реализован метод Finalize.
- После вызова метода Dispose необходимо вызвать метод GC.SuppressFinalize, чтобы предотвратить метод Finalize и избежать ненужного GC.
- Исключения следует тщательно обрабатывать, если метод Dispose вызывается более одного раза. Если ресурсы расположены, любой метод экземпляра может вызвать исключение ObjectDisposedException.
- Объект с ранее вызванным методом Dispose не может быть повторно использован.
- Утилизация рекомендуется только для управления объектами собственных ресурсов и объектными моделями компонентов (COM), доступными для .NET Framework.
- Утилизация может не вызываться одновременно из нескольких потоков из-за непредсказуемых результатов.
- Типы значений не должны создаваться как одноразовые типы или с неуправляемыми членами ресурса.
- При использовании неуправляемых ресурсов рекомендуется применять инструкцию Using исходного кода, которая автоматически вызывает метод Dispose объекта после завершения объектного кода.