Sobes.tech
Back to questions
Junior — Middle
65

Что происходит при вызове метода dispose и какие ресурсы он освобождает?

Answer from AI

sobes.tech AI

Метод Dispose в C# используется для освобождения неуправляемых ресурсов, которые не контролируются сборщиком мусора (GC). Это могут быть файловые дескрипторы, соединения с базой данных, сетевые сокеты, графические ресурсы и т.д.

Когда вызывается Dispose, объект должен освободить все такие ресурсы, чтобы избежать утечек памяти и блокировок.

Типичный паттерн использования Dispose — реализация интерфейса IDisposable:

public class ResourceHolder : IDisposable
{
    private IntPtr unmanagedResource; // пример неуправляемого ресурса
    private bool disposed = false;

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (disposing)
            {
                // Освобождение управляемых ресурсов
            }
            // Освобождение неуправляемых ресурсов
            if (unmanagedResource != IntPtr.Zero)
            {
                // Освобождение ресурса
                unmanagedResource = IntPtr.Zero;
            }
            disposed = true;
        }
    }

    ~ResourceHolder()
    {
        Dispose(false);
    }
}

Таким образом, вызов Dispose гарантирует своевременное освобождение ресурсов, что особенно важно для ресурсов, ограниченных по количеству или влияющих на производительность.