嗨,我有一个对象是一次性的,我想知道什么更好:
this.object.Dispose();
或者
this.object = null;
或者
this.object.Dispose();
this.object = null;
Dispose
更好,更好的方法是使用using
块内的对象并让框架处理它。
对于:this.object.Dispose();
vsthis.object = null;
将对象设置为null
可能会导致遗漏未处置的非托管资源。拥有的全部目的IDisposable
是确保非托管资源在使用后被处置。
该接口的主要用途是释放非托管资源。当不再使用该对象时,垃圾收集器会自动释放分配给托管对象的内存。但是,无法预测垃圾收集何时发生。此外,垃圾收集器不了解非托管资源,例如窗口句柄或打开的文件和流。
Dispose 并不比设置为 null 更好或更差。它们服务于不同的目的。
因为,如果实现正确,对象的终结器应该调用 Dispose() 方法,大多数时候您不需要显式调用它。一旦没有对对象的引用,垃圾收集器就会调用终结器方法,从而调用 Dispose 方法。
您只需要Dispose
该对象 - 您不需要将其设置为null
,除非有其他代码检查空值并做出适当响应。
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();
现在将其设置为空怎么办?
Test t = new Test();
t = null;
它引用的对象不再可访问,现在可以进行垃圾回收(托管资源)。您必须自己处理非托管资源。