Паттерн 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()? Сработает финализатор и ресурсы не будут очищены сразу.
  • Вопрос задан
  • 263 просмотра
Пригласить эксперта
Ответы на вопрос 1
@none7
Если речь о небольшом буфере, то смысла действительно не много. Но если речь о нескольких десятках мегабайт памяти, то ОС свапать начнёт раньше, чем запустит полную сборку мусора. Да и придумывался этот паттерн в первую очередь для блокирующих ресурсов. Таких как файлы, открытые порты, дескрипторы окон, потоки и т.д.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы