Назад к вопросам
Junior — Middle
67
Можете привести пример ситуации в C#, когда происходит неспособность системы правильно освобождать память, что приводит к утечкам?
Компании, где спрашивали
Бренд Монитор
Ответ от нейросети
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).