Sobes.tech
Back to questions
Junior — Middle
66

Можете привести пример ситуации в C#, когда происходит неспособность системы правильно освобождать память, что приводит к утечкам?

Companies where asked
Бренд Монитор

Answer from AI

sobes.tech AI

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

Пример ситуации — использование событий (events) и делегатов:

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

class Publisher {
    public event EventHandler OnChange;

    public void Raise() {
        OnChange?.Invoke(this, EventArgs.Empty);
    }
}

class Subscriber {
    public Subscriber(Publisher pub) {
        pub.OnChange += HandleChange;
    }

    void HandleChange(object sender, EventArgs e) {
        // обработка
    }
}

// Использование
var pub = new Publisher();
var sub = new Subscriber(pub);

// Если sub больше не нужен, но не отписался от pub.OnChange,
// сборщик мусора не сможет освободить sub, возникает утечка.

Чтобы избежать утечек, нужно явно отписываться от событий или использовать слабые ссылки (Weak References).