如何销毁.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中的对象的主要内容,如果未能解决你的问题,请参考以下文章