如何在.Net中销毁对象

3

我知道这是一个奇怪的问题,但我真的很想知道答案。 如何在 .Net 中销毁对象并将内存归还到堆中?

3个回答

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

这是一篇关于.NET使用的垃圾回收的优秀文章。


5

你不能这样做,也不应该尝试。

当一个对象没有被使用的引用时,它就可以进行垃圾回收,如果有机会或者需要内存,它将被删除。

垃圾回收器负责删除对象,你应该让它自行处理,不要试图干扰。尝试保持内存使用率下降本身并没有价值,计算机不会因为有大量未使用的内存而运行更快。试图让垃圾回收器更早地释放内存只会使你的应用程序变慢。

你可以要求垃圾回收器运行一次收集,但是不能保证它会在那个时间实际执行,即使它执行了一次收集,也不能保证任何给定的对象都会被收集。你无法控制特定对象何时被收集。


4

这是因为它是一种托管语言,所以自动完成。公共语言运行时有一个垃圾收集器,它跟踪堆上不能再引用的对象,并在某个时间点(这是不确定的;因此,.NET没有C++中的“析构函数”)释放它们占用的空间。


谢谢您的快速回复。 但是,如果我定义了这样一个边框的对象[WPF示例],然后我不想使用它...我想销毁它? - Ahmed Ghoneim
@Ahmed Adel,你的意思是你已经在代码中定义了它吗?除了实例变量之外,你是否将其分配给其他任何东西?如果你将所有引用设置为“null”,它应该被垃圾回收... - Dan J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接