Встречается на 12% собеседований по C#

Может ли произойти утечка памяти в C#

Да, утечка памяти возможна даже в управляемом языке, таком как C#. Основные причины:

  1. События (event): Подписка на события без отписки может удерживать объекты в памяти.
csharp
// Плохо:
event EventHandler SomethingHappened;
obj.SomethingHappened += HandlerMethod; // Не забыть -= !

// Лучше использовать WeakEvent или отписываться

text

2. **Статические коллекции**: Объекты в них никогда не освобождаются.  
```csharp
static List<object> _cache = new List<object>();
_cache.Add(new object()); // Утечка!
  1. Неуправляемые ресурсы: IDisposable объекты без using/dispose.
csharp
var stream = new FileStream(...); // Без using/Dispose()
  1. Циклические ссылки: GC справляется с ними, но если есть корневые ссылки - утечка.

Как избежать:

  • Использовать Memory Profiler (например, dotMemory)
  • Следить за подписками на события
  • Очищать кеши/коллекции
  • Реализовывать IDisposable для неуправляемых ресурсов

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы