【发布时间】:2010-02-02 16:24:48
【问题描述】:
我想知道是否有一个“技巧”可以让我们知道代码部分中使用的对象是否已正确(完全)处置,或者换句话说,不会造成内存泄漏。
假设我有一个 GDI 对象容器(或其他我需要显式处理的对象)
public class SuperPen
{
Pen _flatPen, _2DPen, _3DPen;
public SuperPen()
{
_flatPen = (Pen)Pens.Black.Clone();
_2DPen = (Pen)Pens.Black.Clone();
_3DPen = (Pen)Pens.Black.Clone();
}
}
现在,我需要 Dispose 我要做的 GDI 对象:
public class SuperPen : IDisposable
{
Pen _flatPen, _2DPen, _3DPen;
public SuperPen()
{
_flatPen = (Pen)Pens.Black.Clone();
_2DPen = (Pen)Pens.Black.Clone();
_3DPen = (Pen)Pens.Black.Clone();
}
public void Dispose()
{
if (_flatPen != null) { _flatPen.Dispose(); _flatPen = null; }
// HERE a copy paste 'forget', should be _2DPen instead
if (_flatPen != null) { _flatPen.Dispose(); _flatPen = null; }
if (_3DPen != null) { _3DPen.Dispose(); _3DPen = null; }
}
}
如果您添加一个新的“一次性”对象并忘记处置它等情况,可能会发生这种情况。我如何检测我的错误,我的意思是,检查我的 SuperPen 是否被正确处置?
【问题讨论】:
-
我的自发想法是“你为什么要克隆
Pens.Black”?但它也许只是用来说明问题? -
@Frederik:只是一种初始化“空”笔的方法。我也可以
= new Pen(Color.Black);- 这样做是因为表明我的对象已经创建并且最终需要释放/释放内存。
标签: .net visual-studio memory-management dispose