我们遇到了一个问题,我们的应用程序不断消耗RAM,因此我在其上拍了一些诊断工具,并查看了进程内存的三个不同快照,并注意到每次我们搜索用户时,都会创建对象(表单) ,不会放在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标记为已释放。
调查了在Diagnostic Tools会话中创建的对象之后,我注意到该对象中有Event Handlers
个不是取消订阅的对象。
下面是“诊断”工具中的代码段,其中显示了在四个人搜索之后创建的其他对象。
如何手动取消订阅事件,以便GC释放资源?