我知道这是一个奇怪的问题,但我真的很想知道答案。 如何在 .Net 中销毁对象并将内存归还到堆中?
简短回答
System.GC.Collect();
这个函数被认为是强制垃圾回收运行的,但我听说它更像是一个礼貌的请求函数,并不一定会真正运行。
长答案
我相信C#使用垃圾回收,所以你最多只能请求它进行清理,但它真正执行的时间是由它自己决定的。当没有引用指向一个对象时,该对象就被认为已经被销毁了。
例如:
Object myobject = new Object();
Object sameobject = myobject;
myobject = null;
//Garbage collection will not clean it up because sameobject is still pointing to the memory location
sameobject = null;
//Garbage collection can now clean it up
这是一篇关于.NET使用的垃圾回收的优秀文章。
你不能这样做,也不应该尝试。
当一个对象没有被使用的引用时,它就可以进行垃圾回收,如果有机会或者需要内存,它将被删除。
垃圾回收器负责删除对象,你应该让它自行处理,不要试图干扰。尝试保持内存使用率下降本身并没有价值,计算机不会因为有大量未使用的内存而运行更快。试图让垃圾回收器更早地释放内存只会使你的应用程序变慢。
你可以要求垃圾回收器运行一次收集,但是不能保证它会在那个时间实际执行,即使它执行了一次收集,也不能保证任何给定的对象都会被收集。你无法控制特定对象何时被收集。
这是因为它是一种托管语言,所以自动完成。公共语言运行时有一个垃圾收集器,它跟踪堆上不能再引用的对象,并在某个时间点(这是不确定的;因此,.NET没有C++中的“析构函数”)释放它们占用的空间。