读书人

GDI+泄漏如何那么高

发布时间: 2013-09-27 14:23:43 作者: rapoo

GDI+泄漏怎么那么高
用的是如下代码:

Gdiplus::Graphics graphics(m_hWnd);
Gdiplus::Image *image = NULL;
image = Gdiplus::Image::FromFile( g_pAppInfo->m_strPicPathFacade );
RectF rt(10, 128, 660, 495);
graphics.DrawImage(image, rt);
//graphics.Clear();
DeleteObject(&graphics);
if ( NULL != image ) { delete image;image = NULL; }

因为图片比较大,放在OnPaint里面,发现其GDI对象成百倍增长,太夸张了,我程序跑个几分钟就死了,到底应该怎么办呢,调用的时候我调用了OnPaint消息:PostMessage(WM_PAINT); 这个有影响吗,大概2秒钟调用一次 gdi+ 图片 GDI泄漏 WM_PAINT OnPaint
[解决办法]
事实上是C++底下其实并不能释放GDI+的资源,GDI+在C#是靠垃圾回收机制进行资源释放的。

所以把image当成一个成员变量吧。
[解决办法]
好像没理由这样的,delete image之后就可以了
[解决办法]

引用:
事实上是C++底下其实并不能释放GDI+的资源,GDI+在C#是靠垃圾回收机制进行资源释放的。

所以把image当成一个成员变量吧。

+1
[解决办法]
GDI资源的释放不是实时的,哪怕你已经DEL了,在ONPAINT里频繁刷新是不合适的。
你自己换个地方刷新画图。

读书人网 >VC/MFC

热点推荐