我如何在C#中释放对象

时间:2010-03-09 05:07:51

标签: c# oop memory-management object

有谁能告诉我如何在C#中释放对象? 例如,我有一个对象:

Object obj1 = new Object();
//Some code using obj1
/*
Here I would like to free obj1, 
after it is no longer required 
and also more importantly 
its scope is the full run time of the program.
*/

感谢您的帮助

9 个答案:

答案 0 :(得分:18)

你不必。运行时的垃圾收集器会出现并为您清理它。这就是为什么你首先使用C#而不是非托管C ++:)

答案 1 :(得分:7)

你不必。你只需停止引用它们,垃圾收集器就会(在某些时候)为你释放它们。

您应该对使用非托管资源的类型实现IDisposable,并在using语句中包装任何实现IDisposable的实例。

答案 2 :(得分:7)

你没有。这就是垃圾收集器自动执行的操作 - 基本上当.NET运行时需要内存时,它会绕过并删除不再使用的对象。

要做的就是要删除对象的所有linnks。

在你的情况下......

OBJ1 = NULL;

最后,该对象不再被引用,可以从垃圾收集器声明。

您可以查看http://en.wikipedia.org/wiki/Garbage_collection_(computer_science)了解详情。

请注意,如果对象引用了非托管资源(比如打开文件等),它应该实现Disposable模式(IDisposable接口),当你不再需要该对象时,你应该明确地释放这些引用。

答案 3 :(得分:5)

不推荐,但如果您真的需要,可以通过以下方式强制进行垃圾回收:

GC.Collect();

答案 4 :(得分:2)

您可以使用 using 语句。在范围之后,将删除对象的引用,垃圾收集器可以在以后收集它。

答案 5 :(得分:0)

您停止引用它们并让垃圾收集器接收它们。

如果要释放对象,请添加以下行:

obj1 = null;

垃圾收集器是否可以自由删除对象(前提是没有其他指向对象的指针使其保持活动状态。)

答案 6 :(得分:0)

正如其他人所说,你不需要明确释放它们;然而,没有提到的事情是,虽然内置的垃圾收集器确实会为您释放它们,但是无法确保垃圾收集器何时释放它。

所有你知道的是,当它超出范围时,它可以被GC清理,并且在某个阶段将是。

答案 7 :(得分:0)

正如克里斯指出的那样,C#为你做了大部分的垃圾收集。您需要考虑垃圾收集的实例是IDisposable接口的实现以及使用WeakReference时的实现。 有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.idisposable.aspxhttp://msdn.microsoft.com/en-us/library/system.idisposable.aspx

答案 8 :(得分:0)

GC将收集所有非托管资源。

非托管资源应实现IDisposable。如果您正在使用实现IDisposable的对象,那么您应该在不再需要时调用对象的Dispose()方法,或者将其实例包装在using语句中。