我在使用我们的系统进行内存管理方面存在问题。
基本上这是我的设计:
加载记录列表。 frmBrowse使用的内存 90MB
点击记录后,会弹出另一个表格,这是所选记录的详细表格 frmAP 内存使用110MB
private void ViewRecord()
{
try
{
if(oAP!=null)
oAP = new frmAP();
oAP.LoadRecordDetails();
oAP.Show();
}
catch (Exception ex)
{
clsClass.oGenMethods.ErrorMessage(ex.Message, "frmBrowse", "EditSearchFields");
}
}
在frmAP_Close()
上this.Hide();
-Memory,110MB
当用户关闭表单(frmBrowse)时调用“frmAP”/实例化
public void tsClose_Click(object sender,EventArgs e) {
if (oAP != null)
{
oAP .Dispose();
oAP .Close();
GC.Collect();
}
}
问题是内存仍处于~110MB列表(frmBrowse)表格和记录表格(frmAp)是否已关闭。
请咨询
先谢谢
更新
我试图删除.Hide()以隔离问题,但内存仍在不断增长
答案 0 :(得分:4)
调用Close
不会释放与对象关联的内存。这是垃圾收集器的工作。 Close
或Dispose
只是告诉对象释放它正在使用的任何非托管内存或资源。对象及其引用的所有内容仍然留在内存中。
要确保收集oAP
,请将其设置为null:
oAP.Close();
oAP = null;
然而,这可能是错误的事情。垃圾收集器的重点是在需要时从未引用的对象中收集内存。因此,让它完成它的工作,不要强制它运行,你不需要将oAP
设置为null,并且oAP
并且当GC需要时将收集它引用的所有内容。 / p>