c# - C#中删除对象后如何完全清除内存

标签 c# memory

使用对象后如何清除内存?

在这个论坛上阅读了很多问题,每个人都说:使用 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。


那么..我怎样才能释放我的内存?

希望您能理解我的问题。抱歉我的英语不好:-)

最佳答案

我认为这些东西会帮助你理解:

  1. GC收集对象时,关联的内存可能会也可能不会释放给操作系统。 CLR 自动管理此过程。
  2. 当调用GC.Collect()时,它开始收集并立即返回。它不会等待清理完成。要强制程序等待,您需要在 GC.Collect() 之后调用 GC.WaitForPendingFinalizers()
  3. Form 类正在实现 IDisposable 并使用非托管资源。要清理它,您需要调用 Dispose(true)

仅供引用:在大多数情况下,您确实不需要关心手动删除对象,希望您知道自己在做什么。

关于c# - C#中删除对象后如何完全清除内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35101845/

相关文章:

c# - 命中断点时执行代码?

c# - WPF 样式/模板仅应用于最后添加的元素

c# - WPF 中 Canvas 的大小

linux - Android Studio 消耗所有系统 RAM 和交换内存

memory - 是否有可能在 Rust 中导致内存泄漏?

c# - 在 C# 中使用 Xml 序列化从一个类转换为另一个类

c# - NEST Elasticsearch 中的 Lambda 查询具有过滤器和值数组

java - servlet的filter.destroy()方法的api描述

c - 创建线程时linux进程内存增长

Android 生命周期——我应该使用服务吗?