释放作为类上的属性保存的图像

本文关键字:属性 图像 保存 释放 | 更新日期: 2023-09-27 17:56:29

如果我有一个像这样的类

public class Foo 
{
   private Image image;
   ....
   ....
}

我应该创建析构函数并在那里调用 Dispose 以释放映像的内存,否则 DC 将自动执行此操作。

释放作为类上的属性保存的图像

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

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

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

你可以实现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

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