Re: [Минутка хардкора-10]: Смертельная гонка
От: romangr Россия  
Дата: 15.02.18 08:05
Оценка: 3 (1) +1
Здравствуйте, Sinix, Вы писали:

S>Сбж, он же Be Careful Where You Put GC.SuppressFinalize от Alois Craus.

S>Он же "Как не надо использовать финалайзеры, сложный способ"

public class Event : IDisposable
{
    internal IntPtr hGlobal;  // allocate some unmanaged memory

    public Event()
    {
        hGlobal = Marshal.AllocHGlobal(500);
    }

    ~Event()  // finalizer 
    {
        Dispose();
    }

    public void Dispose()
    {
        if( hGlobal !=  IntPtr.Zero) // check if memory is gone
        {
            Marshal.FreeHGlobal(hGlobal); // free it
            GC.SuppressFinalize(this); // Prevent finalizer from running it again
            hGlobal = IntPtr.Zero;
        }
    }
}


Вызывать из финализатора GC.SuppressFinalize(this) это явный косяк товарища.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.