嗨,我有一个对象是Disposable,我想知道什么是更好的:
this.object.Dispose();
或
this.object = null;
或
this.object.Dispose();
this.object = null;
答案 0 :(得分:12)
Dispose
更好,更好的方法是使用using
块内的对象并让框架处理它。
对于:this.object.Dispose();
vs this.object = null;
将对象设置为null
可能会导致未管理的资源被取消。拥有IDisposable
的整个目标是确保在使用后取消管理资源。
此接口的主要用途是释放非托管资源。 垃圾收集器自动释放分配给的内存 不再使用该对象时的托管对象。但事实并非如此 可以预测何时会发生垃圾收集。此外, 垃圾收集器不了解非托管资源,例如 窗口句柄,或打开文件和流。
答案 1 :(得分:2)
您只需要Dispose
该对象 - 您不需要将其设置为null
,除非有其他代码检查空值并做出适当的响应。
答案 2 :(得分:2)
Dispose并不比设置为null更好或更差。它们用于不同的目的。
因为如果正确实现,对象的终结器应调用Dispose()方法,大多数情况下您不需要显式调用它。只要没有对象的引用,终结器方法就会被垃圾收集器调用,从而调用Dispose方法。
答案 3 :(得分:0)
object.Dispose()或object = null
什么是处置?任何实现IDisposable的类型都会正常使用此方法(尽管您可以编写自己的公共方法)。
public class Test:IDisposable
{
public void Dispose()
{
//release resources here managed and unmanaged
}
}
现在你已经实现了IDisposable,所以最好的方法是
using (Test t = new Test())
{
}
通过在使用块框架中执行此操作将处理所有资源。而且你不必担心。即使你对象的终结器方法应该为你调用Dispose()
虽然也可以做
Test t = new Test();
t.Dispose();
现在把它设置为null?
Test t = new Test();
t = null;
它引用的对象不再可访问,现在可以进行垃圾回收(托管资源)。您必须自己处理未管理的资源。