我在我的应用程序中调试资源泄漏并创建了一个测试应用程序来测试 GDI 对象泄漏。在 OnPaint 中,我创建新图标和新位图,但不处理它们。之后,我在每个案例的任务管理器中检查 GDi 对象的增加。但是,如果我继续重新绘制应用程序的主窗口,图标的 GDI 对象数量会增加,但位图没有变化。图标没有像位图一样被清理,有什么特别的原因吗?
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// 1. icon increases number of GDI objects used by this app during repaint.
//var icon = Resources.TestIcon;
//e.Graphics.DrawIcon(icon, 0, 0);
// 2. bitmap doesn't seem to have any impact (only 1 GDI object)
//var image = Resources.TestImage;
//e.Graphics.DrawImage(image, 0, 0);
}
}
测试结果:
- 没有图标和位图 - 30 个 GDI 对象
- 使用位图 - 31 GDI 对象,数字不会改变。
- 使用图标 - 31,然后如果您重新绘制窗口,数字会增加。