如何销毁.Net中的对象

Posted

技术标签:

【中文标题】如何销毁.Net中的对象【英文标题】:How to destroy objects in .Net 【发布时间】:2011-08-09 21:42:17 【问题描述】:

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

【问题讨论】:

【参考方案1】:

你不能,也不应该尝试。

当不再使用对对象的引用时,它就有资格进行垃圾回收,如果有机会或需要内存,它将被删除。

垃圾收集器负责删除对象,您应该让它完成它的工作,而不要试图干预。尝试降低内存使用量本身没有任何价值,计算机不会因为有大量未使用的内存而运行得更快。试图让垃圾收集器更早地释放内存只会让你的应用程序变慢。

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

【讨论】:

【参考方案2】:

简答

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 使用的精彩文章

【讨论】:

【参考方案3】:

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

【讨论】:

:) 感谢您的快速回复,但如果我定义了这样一个边框的对象 [WPF 示例] 那么我不想使用它.. 我想销毁它??跨度> @Ahmed Adel 你的意思是你已经在代码中定义了它?您是否将它分配给实例变量以外的任何东西?如果你将所有对它的引用设置为null,它应该是GCed...

以上是关于如何销毁.Net中的对象的主要内容,如果未能解决你的问题,请参考以下文章

销毁对象在java中怎么用

(统一)销毁当前场景中的游戏对象并在加载当前场景后使其永久销毁?

如何在 QML 中的同一事件之后创建/销毁动态对象?

C++ 中的对象销毁

从 .NET 应用程序中销毁 COM 对象

C++如何使用派生类构造函数销毁基类中的对象