处理作为类别的财产而持有的图像

时间:2016-07-12 14:13:26

标签: c#

如果我有类似

的课程
public class Foo 
{
   private Image image;
   ....
   ....
}

我应该创建析构函数并调用Dispose来释放图像的内存,否则DC会自动执行。

2 个答案:

答案 0 :(得分:3)

查看Microsoft提议的Dispose pattern。文章中的第一个DO指出:在包含一次性类型实例的类型上实现Basic Dispose Pattern。有关基本模式的详细信息,请参阅基本处理模式部分。

由于Image是一次性类型,你应该在包装类上实现IDisposable。

我不打算使用析构函数,因为在对象被破坏之前可能需要一段时间,而使用Dispose可以保持控制。

答案 1 :(得分:1)

您可以实施IDisposable:

public class Foo : IDisposable
{
    private Image image;

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

然后使用:

using(var f = new Foo())
{

} // disposed automatically
  

此接口的主要用途是释放非托管资源。   垃圾收集器自动释放分配给的内存   不再使用该对象时的托管对象。但事实并非如此   可以预测何时会发生垃圾收集。此外,   垃圾收集器不了解非托管资源,例如   窗口句柄,或打开文件和流。