每个用户定义的类是否需要实现IDisposable接口以获取垃圾
我不确定用户定义的类对象是如何被垃圾收集的。 我是否需要在每个类上实现IDisposable接口并调用dispose()方法来释放内存?
不会。当您停止引用它时,每个正常的托管.NET对象都会被垃圾回收。 IDisposable意味着您将实现需要由调用者调用的Dispose()方法 – 它通常会释放未收集的内容。 它还有助于确定释放内存的位置。
查看IDisposable模式以确保您正确执行:
http://www.atalasoft.com/cs/blogs/stevehawley/archive/2006/09/21/10887.aspx
不,每个对象都会自动处理。
当您在对象解构时执行某种特殊操作时,IDisposable可用。 例如,如果在对象工作期间锁定某些资源(如文件等),则可以在Dispose方法中释放它们。
如果要在代码中使用某些本机资源(如文件流),则必须使用IDisposable。 出于所有其他目的,.Net垃圾收集器做得很好。
简单地说明IDisposable并不会强制进行垃圾回收。 需要显式调用Dispose方法来清理任何本机资源。
编辑:我建议你通过C# by Jeff Richter 浏览ClR中的垃圾收集章节。
不可以。当用户定义的类不再被引用时,它就是一个用户定义的类。 您只需执行classObject = null
即可强制执行此操作。 如果这是当前引用classObject
的应用程序的最后一部分,那么垃圾收集将清除其内存。
IDisposable
主要用于使用,因此您可以通过using()
方法组织垃圾收集活动。
在.NET中,默认情况下,所有对象都应该使用垃圾收集器从内存中释放,只要它们不再被使用,所以你不需要在每个类上实现IDisposable,但是有一些排序很好。内存释放机制,如析构函数或Dispose方法本身。
这是使用析构函数的一个很好的例子: http : //www.developer.com/net/csharp/article.php/3343191/C-Tip-Forcing-Garbage-Collection-in-NET.htm
不,不是的。 Dispose()
方法旨在做额外的工作,处理在不再使用对象时必须处理的资源。 请记住,收集的垃圾可能会在对象丢失最后一次引用后很长时间内发生。
当使用IDisposable
时,你应该在使用fx完成fx时处理对象
using (SomeClassWithDisp object = new SomeClassWithDisp()) { //Use the object }
另见,见:
在C#中使用IDisposable与析构函数有什么区别?
您实现的dispose()方法用于显式释放对象拥有引用的非托管资源(文件,流,句柄等)。
我们的想法是,您可以通过调用dispose方法尽快释放这些资源。 dispose()方法不会IMMEDIATELY在您的对象上运行垃圾收集,而是释放资源并允许垃圾收集器在方便时执行其操作。