如何使用IDisposable处理对象

时间:2010-07-28 11:34:11

标签: c# .net garbage-collection idisposable

我想使用IDisposable接口清除内存中没有使用的任何资源。

public class dispose:IDisposable
{
        public void Dispose()
        {

            throw new NotImplementedException();
        }

        public void fun()
        {
            PizzaFactory _pz = new PizzaFactory();   //
        }
    }

我想处理pz对象,当没有引用存在时。请让我知道怎么做。

5 个答案:

答案 0 :(得分:10)

这就是垃圾收集器的用途。如果您只是担心回收内存,请让垃圾收集器为您完成。 IDisposable是关于回收非托管资源(网络连接,文件句柄等)。如果PizzaFactory包含其中任何内容,那么 it 应该实现IDisposable - 您应该明确管理其处置。 (你可以添加一个终结器来在某些时候运行 之后没有更多的实时引用,但它是不确定的。)

答案 1 :(得分:5)

这听起来更像是垃圾收集,而不是IDisposable

如果_pz是一次性的,并且需要在处置dispose实例时处理(通常通过using),您可以:

    public void Dispose()
    {
        if(_pz != null) _pz.Dispose();
        _pz = null;
    }

可以做与终结者相关的事情,但这不是一个好主意。

答案 2 :(得分:3)

public void Dispose()
{
     _pz.Dispose();
}

如果PizzaFactory不是IDisposable,你不需要任何东西。有垃圾收集器。

答案 3 :(得分:0)

vaibhav - 你不是要实现IDisposable接口才能使用使用构造吗?就这样,它会被自动处理..

吉姆

答案 4 :(得分:0)