有谁能告诉我如何在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.
*/
感谢您的帮助
答案 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.aspx和http://msdn.microsoft.com/en-us/library/system.idisposable.aspx。
答案 8 :(得分:0)
GC将收集所有非托管资源。
非托管资源应实现IDisposable
。如果您正在使用实现IDisposable
的对象,那么您应该在不再需要时调用对象的Dispose()
方法,或者将其实例包装在using
语句中。