Встречается на 12% собеседований по C#
Может ли произойти утечка памяти в C#
Да, утечка памяти возможна даже в управляемом языке, таком как C#. Основные причины:
- События (event): Подписка на события без отписки может удерживать объекты в памяти.
csharp
// Плохо:
event EventHandler SomethingHappened;
obj.SomethingHappened += HandlerMethod; // Не забыть -= !
// Лучше использовать WeakEvent или отписываться
text
2. **Статические коллекции**: Объекты в них никогда не освобождаются.
```csharp
static List<object> _cache = new List<object>();
_cache.Add(new object()); // Утечка!- Неуправляемые ресурсы: IDisposable объекты без using/dispose.
csharp
var stream = new FileStream(...); // Без using/Dispose()- Циклические ссылки: GC справляется с ними, но если есть корневые ссылки - утечка.
Как избежать:
- Использовать Memory Profiler (например, dotMemory)
- Следить за подписками на события
- Очищать кеши/коллекции
- Реализовывать IDisposable для неуправляемых ресурсов
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы