Паттерн Dispose от MS? public class ComplexResourceHolder : IDisposable {
private IntPtr buffer; // unmanaged memory buffer
private SafeHandle resource; // disposable handle to a resource
public ComplexResourceHolder(){
this.buffer = ... // allocates memory
this.resource = ... // allocates the resource
}
protected virtual void Dispose(bool disposing){
ReleaseBuffer(buffer); // release unmanaged memory
if (disposing){ // release other disposable objects
if (resource!= null) resource.Dispose();
}
}
~ ComplexResourceHolder(){
Dispose(false);
}
public void Dispose(){
Dispose(true);
GC.SuppressFinalize(this);
}
}
В чем его смысл, если я забуду вызвать Dispose()? Сработает финализатор и ресурсы не будут очищены сразу.

21 Авг 2019 в 07:04
185 +1
0
Ответы
1

Паттерн Dispose разработан для обеспечения явного освобождения управляемых и неуправляемых ресурсов. Если вы забудете вызвать Dispose(), то ресурсы не будут освобождены сразу, но при уничтожении объекта сработает финализатор, который вызовет Dispose(false) и освободит ресурсы.

Однако использование финализатора не стоит рассматривать как основной способ освобождения ресурсов, так как он работает неопределенно в отношении времени выполнения и порядка вызова. Лучше всегда явно вызывать Dispose() для надежной очистки ресурсов в нужный момент.

20 Апр в 13:08
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 727 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир