使用对象后如何清除内存?
在这个论坛上阅读了很多问题,每个人都说:使用 myObject=null
删除您的对象。
像这样:
Car myCar = new Car();
//do stuff
myCar.horn();
myCar = null; // <-- DELETE
在我的程序中,我创建了很多Form
(公共(public)部分类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。
那么..我怎样才能释放我的内存?
希望您能理解我的问题。抱歉我的英语不好:-)
最佳答案
我认为这些东西会帮助你理解:
- 当
GC
收集对象时,关联的内存可能会也可能不会释放给操作系统。CLR
自动管理此过程。 - 当调用
GC.Collect()
时,它开始收集并立即返回。它不会等待清理完成。要强制程序等待,您需要在GC.Collect()
之后调用GC.WaitForPendingFinalizers()
。 Form
类正在实现IDisposable
并使用非托管资源。要清理它,您需要调用Dispose(true)
仅供引用:在大多数情况下,您确实不需要关心手动删除对象,希望您知道自己在做什么。
关于c# - C#中删除对象后如何完全清除内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35101845/