每个用户定义的类是否需要实现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在您的对象上运行垃圾收集,而是释放资源并允许垃圾收集器在方便时执行其操作。