如何在使用对象后清除内存?
在这个论坛上阅读了很多问题,每个人都说:用myObject=null
删除你的对象。
像这样:
Car myCar = new Car();
//do stuff
myCar.horn();
myCar = null; // <-- DELETE
在我的计划中,我创建了大量Form
(public partial class Myform: Form
)。
像这样:
ArrayList listOfMyForms = new ArrayList();
for(int i = 0; i < 100; i++)
{
listOfMyForms.Add(new Myform());
}
所以......我做了100次对象......
但是如果我删除所有使用remove方法(调用for循环):
public void remove(Myform someForm)
{
listOfMyForms.Remove(someForm);
someForm = null;
GC.Collect();
}
我可以在Visual Studio部分看到完整的内存(20mb):诊断工具(进程监视器
在创建100个表单之前,内存为16mb。
创建100个表单后,内存为20mb。
清理完所有表格后,内存为20mb。
那么..我怎样才能释放自己的记忆?
我希望,你了解我的问题。抱歉我的英文不好: - )
答案 0 :(得分:3)
我认为这些事情会帮助你理解:
GC
收集对象时,关联的内存可能会也可能不会被释放到OS。 CLR
自动管理此流程。 GC.Collect()
时,它开始收集并立即返回。它不等待完成清理。要强制您的程序等待,您需要在GC.WaitForPendingFinalizers()
之后致电GC.Collect()
。Form
类正在实施IDisposable
并正在使用非托管资源。要清洁它,您需要致电Dispose(true)
仅供参考:在大多数情况下,你真的不需要关心手动删除对象,希望你知道你在做什么。
答案 1 :(得分:0)
使用下面的代码。
public void remove(Myform someForm)
{
someForm.Dispose(true)
}
因为表单使用托管代码。使用托管代码时,您需要实现IDisposable,并在您不再需要该对象时调用Dispose方法。