近日做了一个程序,GDI+做的相册。
问题是每次打开一组图片后,内存增大一定量。再打开再增大。打开新文件前会cbmp.DeleteObject();cdc.DeleteDC();但是内存不减少。持续增加。在最后再一次手工cbmp.DeleteObject();cdc.DeleteDC();内存不见减少。每次打开一组文件(30~100个)后,程序对应内存增加几十M。如果将窗口最小化,再最大化,内存减少到10M以内。逐张刷新打开的图形文件,内存缓慢上升。
问如何在不最小化窗口的情况下,将内存自动降下来?
希望高手指点。试过SelectObject(old),没有任何效果。

解决方案 »

  1.   

    找个检测gdi资源泄漏的工具查找一下吧。或者,通过注释代码,逐段缩小范围。一般来说,gdi,gdi+调用都是成对出现。
      

  2.   

    Get得到的要release
    create得到的要delete
      

  3.   

    http://blog.csdn.net/bobob/archive/2005/12/29/565188.aspx
      

  4.   

    检测gdi资源泄漏的工具用过了。没有任何结果。
    整个程序就是
    1、用DrawImage绘图,
    2、用FillRegion填充
    3、用DrawLine画线
    4、用了SelectObject(&font)一次,在4行后SelectObject(pOldFont);
    5、最多的就是BITBLT了。
    没别的了。
    结果就楼顶所说。请高手帮帮忙。
      

  5.   

    Enable profiling,运行看看时间分布。
      

  6.   

    确实,画笔等GDI资源都需要释放的,不然也会有GDI泄露的,,
      

  7.   

    GDI+的对象是如何分配的?如果是 new 出来或者 FromHandle/FromFile 出来的指针,需要用 delete 释放。
      

  8.   

    如果你都是用GDI+,那么SelectObject之类的操作都没什么用处的。
    检查一下LS说的问题。
      

  9.   

    DrawImage(myImg,……);
    这个函数会增加内存用量,函数完成后,内存不会自动减少。请教有何办法让内存减少?
      

  10.   

    GDI+ 怨念啊……哎,现在发现需要学习的的东西太多了
      

  11.   

    我看这正起劲呢,跟你同样的问题。解决了的话能教一教我么,谢谢,QQ124667720,注明csdn活着GDI,万分感激