Re[18]: WPF. Финализаторы не вызываются. Утечка памяти
От: pilgrim_ Россия  
Дата: 17.06.20 14:09
Оценка:
Здравствуйте, igor-booch, Вы писали:


S>>Но не всегда можно вызвать Dispose, а освободить ресурсы необходимо.

IB>Приведите пример, когда нельзя вызвать Dispose

SafeHandle

public abstract class SafeHandle : System.Runtime.ConstrainedExecution.CriticalFinalizerObject, IDisposable
{
...
~SafeHandle ();
}


class Unmanaged
{
    public static SafeHandle OpenResource(string resourceName);
}

class ResourceHolder : IDisposable
{
    SafeHandle _rsrcHandle;

    public ResourceHolder()
    {
        _rsrcHandle = Unmanaged.OpenResource();

        //вызов какого-то метода, который может бросить exception
        throw new SomeException();
    }

    public void Dispose()
    {
        _rsrcHandle.Dispose();
    }
}

...
using (var r = new ResourceHolder())
{
}
//Dispose вызван не будет, но остается надежда на вызов Finalize (~SafeHandle).


Могло бы решиться обкладыванием где нужно try/catch и там вызывать Dispose, но так не делают, код превратится в кашу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.