我如何在C#中释放对象

谁能告诉我如何在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. */ 

感谢你的帮助

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

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

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

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

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

在你的情况下….

OBJ1 = NULL;

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

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

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

不建议这样做,但如果你真的需要,可以通过以下方式强制进行垃圾回收:

 GC.Collect(); 

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

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

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

obj1 = null;

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

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

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

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

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

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