gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:51:56 25 4
gpt4 key购买 nike

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

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


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

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

最佳答案

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

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com