如果我有类似
的课程public class Foo
{
private Image image;
....
....
}
我应该创建析构函数并调用Dispose来释放图像的内存,否则DC会自动执行。
答案 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
此接口的主要用途是释放非托管资源。 垃圾收集器自动释放分配给的内存 不再使用该对象时的托管对象。但事实并非如此 可以预测何时会发生垃圾收集。此外, 垃圾收集器不了解非托管资源,例如 窗口句柄,或打开文件和流。