GDI+内存越用越大,不能手工释放。正常退出时,内存自动释放。

baoyz 2010-02-05 10:06:45
近日做了一个程序,GDI+做的相册。
问题是每次打开一组图片后,内存增大一定量。再打开再增大。

打开新文件前会cbmp.DeleteObject();cdc.DeleteDC();但是内存不减少。持续增加。

在最后再一次手工cbmp.DeleteObject();cdc.DeleteDC();内存不见减少。

每次打开一组文件(30~100个)后,程序对应内存增加几十M。如果将窗口最小化,再最大化,内存减少到10M以内。逐张刷新打开的图形文件,内存缓慢上升。


问如何在不最小化窗口的情况下,将内存自动降下来?
希望高手指点。

试过SelectObject(old),没有任何效果。




...全文
257 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinjiadong 2010-05-25
  • 打赏
  • 举报
回复
我看这正起劲呢,跟你同样的问题。解决了的话能教一教我么,谢谢,QQ124667720,注明csdn活着GDI,万分感激
baoyz 2010-02-23
  • 打赏
  • 举报
回复
算了,不搞了。结贴了。来者有分
lmxmx 2010-02-17
  • 打赏
  • 举报
回复
GDI+ 怨念啊……

哎,现在发现需要学习的的东西太多了
baoyz 2010-02-17
  • 打赏
  • 举报
回复
DrawImage(myImg,……);
这个函数会增加内存用量,函数完成后,内存不会自动减少。

请教有何办法让内存减少?
liujiaji 2010-02-10
  • 打赏
  • 举报
回复
里面是不是有循环创建?仔细看看,或者注释代码,缩小范围检查。
gamedragon 2010-02-07
  • 打赏
  • 举报
回复
如果你都是用GDI+,那么SelectObject之类的操作都没什么用处的。
检查一下LS说的问题。
jameshooo 2010-02-07
  • 打赏
  • 举报
回复
GDI+的对象是如何分配的?如果是 new 出来或者 FromHandle/FromFile 出来的指针,需要用 delete 释放。
青稞 2010-02-07
  • 打赏
  • 举报
回复
确实,画笔等GDI资源都需要释放的,不然也会有GDI泄露的,,
element_cn 2010-02-07
  • 打赏
  • 举报
回复
画笔阿,图片阿都需要释放的
sjdev 2010-02-07
  • 打赏
  • 举报
回复
Enable profiling,运行看看时间分布。
baoyz 2010-02-07
  • 打赏
  • 举报
回复
检测gdi资源泄漏的工具用过了。没有任何结果。
整个程序就是
1、用DrawImage绘图,
2、用FillRegion填充
3、用DrawLine画线
4、用了SelectObject(&font)一次,在4行后SelectObject(pOldFont);
5、最多的就是BITBLT了。
没别的了。
结果就楼顶所说。

请高手帮帮忙。
  • 打赏
  • 举报
回复
Get得到的要release
create得到的要delete
sjdev 2010-02-05
  • 打赏
  • 举报
回复
找个检测gdi资源泄漏的工具查找一下吧。

或者,

通过注释代码,逐段缩小范围。

一般来说,gdi,gdi+调用都是成对出现。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧