Как правильно реализовать очистку памяти? Посмотрел примеры: 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
. Иначе по идее ничего делать не надо, разве что обнулите ссылку на ваш объект из долгоживущего объекта и ждите, пока объект съестся сборщиком мусора.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Доброго времени суток, есть класс описывающий записи в бд:
Подскажите пожалуйста почему не срабатывает код, окно находит кнопку тоже, но нажатия не происходит ни WM_LBUTTONDOWN c WM_LBUTTONUP ни BM_CLICK
При попадании по игроку нужно обновлять показания его здоровья на его сторонеПочему этого не происходит и как правильно это реализовать?