Удалить ссылки на события из объекта для сборки мусора для работы - PullRequest
0 голосов
/ 17 декабря 2018

У нас есть проблема, из-за которой наше приложение продолжает расходовать оперативную память, поэтому я установил на него несколько диагностических инструментов, просмотрел три разных снимка памяти процесса и заметил, что каждый раз, когда мы ищем пользователя, создается объект (форма)., не размещается на формах 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, от которого не отписываются.

Ниже приведен фрагмент из средств диагностики, которыйпоказывает дополнительные объекты, создаваемые после четырех поисковых запросов.

Summary

Events

Как я могу отписаться от событий вручную, чтобы GC мог освободить ресурсы?

...