У нас есть проблема, из-за которой наше приложение продолжает расходовать оперативную память, поэтому я установил на него несколько диагностических инструментов, просмотрел три разных снимка памяти процесса и заметил, что каждый раз, когда мы ищем пользователя, создается объект (форма)., не размещается на формах Close()
.
Это код, который происходит при поиске пользователя.
private void btnSearch_Click(object sender, EventArgs e)
{
frmCombinedSearch frmCmbSearch = new frmCombinedSearch();
try
{
// Shows the 'form' in the same tab. This is a tabbed control.
frmCmbSearch.ShowInTab(this.ParentTabPage);
}
catch (Exception ex)
{
this.ShowException(ex);
}
}
После отображения frmCombinedSearch
объект живетпока не будет нажата другая кнопка, которая в конечном итоге инициирует событие this.Close()
в форме.Насколько я понимаю, объект помечен как освобожденный GC после этой точки.
Изучив объекты, создаваемые в сеансе Средства диагностики, я заметил, что у объекта есть Event Handlers
, от которого не отписываются.
Ниже приведен фрагмент из средств диагностики, которыйпоказывает дополнительные объекты, создаваемые после четырех поисковых запросов.
Как я могу отписаться от событий вручную, чтобы GC мог освободить ресурсы?