我知道这是一个奇怪的问题,但我真的很高兴知道答案。 你如何破坏.Net中的对象,并将内存返回堆中?
答案 0 :(得分:6)
简答
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
这是一篇关于garbage collection .NET使用
的精彩文章答案 1 :(得分:4)
它是自动完成的,因为它是一种托管语言。公共语言运行时有一个垃圾收集器,它可以跟踪堆上的对象,这些对象不再被引用,并且在某些时候使它们占用的空间可用(这是不确定的;因此.NET在这个意义上没有“析构函数” C ++)。
答案 2 :(得分:4)
你不能,也不应该尝试。
当没有对对象的更多使用引用时,它对于垃圾收集是合法的,并且如果有机会或者需要内存则将被删除。
垃圾收集器负责删除对象,你应该让它做它的工作而不试图干扰。尝试保持内存使用率没有任何价值,计算机因拥有大量未使用的内存而无法运行得更快。试图让垃圾收集器更早地释放内存只会使你的应用程序变慢。
您可以要求垃圾收集器运行一个集合,但不能保证它当时会实际执行一个集合,即使它执行了一个集合,也不能保证将收集任何给定的对象。您无法控制何时收集特定对象。