Как правильно реализовать очистку памяти? Посмотрел примеры: docs.microsoft, msdn, metanit.
Но нигде не показано, что делать с объектами внутри класса...
Например вот часть класса таблицы:
#region fields
private List<Module> _allModule;
#endregion
#region constructors
public ModuleTable(List<Module> allModule)
{
_allModule = allModule;
}
#endregion
Как правильно реализовать очистку памяти для такого класса с применением интерфейсов IDisposable?
В .NET есть два вида памяти — управляемая и неуправляемая.
Явное освобождение управляемой памяти практически никогда не нужно, главное, чтобы на неё не было ссылок из «корневых» объектов. При этом её при недостатке памяти съест сборщик мусора.
Важные случаи, когда необходимо «вручную» заботиться об освобождении управляемой памяти: вы подписываетесь на событие у долгоживущего объекта, при этом у объекта есть неявно ссылка на ваш объект, а значит, ваш объект не будет убран сборщиком мусора. Методы борьбы с этим — отписка от события в момент, когда она больше не нужна, или использование WeakEventManager.
Неуправляемую память нужно оборачивать в объект, реализующий IDisposable (например, SafeHandle). Когда она не нужна, ещё нужно освободить при помощи Dispose. (Об этом в деталях здесь.) Впрочем, освобождать IDisposable нужно и если за ними нет неуправляемой памяти.
Конкретно для вашего случая, у вас не видно ни подписок на события, ни других методов попасть в глобальные списки. Если ваш Module реализует IDisposable и вы — владелец объектов, то вы должны в нужный момент вызвать Dispose. Иначе по идее ничего делать не надо, разве что обнулите ссылку на ваш объект из долгоживущего объекта и ждите, пока объект съестся сборщиком мусора.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости