друзья. Разрабатываю масштабный проект на c# WinForms, столкнулся с проблемой утечки памяти. Проект имеет немалое количество UserControl, заметил при добавлении на форму данных контролов нагружается память, а вот после очистки базовой формы, память не очищается.
Примеры:
Один из модулей "Расписание", загружает необходимые UserControl'ы на экран. Память поднимается под 290к
После удаление данного модуля с экрана, память не меняется.
Пробовал удалять основной контрол с помощью:
this.RemoveAt()
this.Cntrols.Clear()
control.Dispose()
Не помогает и принудительная очистка:
GC.Collect();
GC.WaitForPendingFinalizers();
Также, почитав о данной проблеме, говорят, что необходимо сбрасывать ссылки на события. Каждый UserControl имеет небольшое количество событий, пример:
public event EventHandler entryClick = null;
public event EventHandler entryMouseEnter = null;
public event EventHandler entryMouseLeave = null;
private DataEntry entryData = null;
public AtlantControlEntry()
{
InitializeComponent();
this.Click += items_Click;
this.MouseEnter += items_mouseEnter;
this.MouseLeave += items_mouseLeave;
for (int i = 0; i < this.Controls.Count; i++)
{
this.Controls[i].Click += items_Click;
this.Controls[i].MouseEnter += items_mouseEnter;
this.Controls[i].MouseLeave += items_mouseLeave;
}
}
// Working with the form-action // ->
public void items_Click(object s, EventArgs e)
{
entryClick(s, e);
}
public void items_mouseEnter(object s, EventArgs e)
{
entryMouseEnter(s, e);
}
public void items_mouseLeave(object s, EventArgs e)
{
entryMouseLeave(s, e);
}
// Working with the form-action // <-
...
Но как их сбрасывать не имею понятия. Буду благодарен любой помощи, заранее спасибо.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости