GDI+内存释放

voidsky 2010-01-27 04:26:39
我使用GDI+进行画图,贴图都是在一个函数里面。因为刷新原因要不停的调用该函数。
此时问题出现了,资源管理器里面显示程序占用的内存在不停的增长,我跟到程序里面去看
m_pImageFrame = Image::FromFile(L"Skin\\picture.png");每运行一次类似的语句就会增加内存
在此函数的最后我使用了delete m_pImageFrame;但是内存仍然没有释放。程序占用内存仍然在不停的增长
各位高手帮帮忙,在此谢谢了!
...全文
423 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
booyex 2010-07-21
  • 打赏
  • 举报
回复
鄙视楼主,解决了后就不说解决的方法。
jinjiadong 2010-05-25
  • 打赏
  • 举报
回复
最痛恨这种人,解决了不说怎么解决的
voidsky 2010-01-28
  • 打赏
  • 举报
回复
呵呵,谢谢大家已经解决了
sjdev 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 voidsky 的回复:]
m_pImageFrame = Image::FromFile(L"Skin\\picture.png");
[/Quote]

Image::FromFile
This method returns a pointer to the new Image object.
羽毛乱发 2010-01-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ljx0305 的回复:]
这个图片又不是一直被改变不要每次都重新加载一次啊 只要在前边进行一次初始化后一直存在内存当然啊直到不用的时候再delete啊,你这样做很费资源
[/Quote]

赞同这个!
为什么要老是去加载呢,初始化的时候加载一次就可以了,你这么老是加载,浪费时间,浪费效率,
voidsky 2010-01-27
  • 打赏
  • 举报
回复
确定了,上面的释放是成功的
voidsky 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dolphin_001 的回复:]
估计楼主是在onpaint里面不停的CreateCompatibleDC和CreateCompatibleBitmap,解决方法有2
1,在onpaint最后参考4楼办法,不可全用上。
2,可在OnInitDialog创建dc,窗口销毁时才释放。避免经常创建和释放,提高效能
[/Quote]
我以前写的程序也是这样的,完全没有影响。这次不知道为什么会出现这样的情况
voidsky 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hkf314 的回复:]
引用 4 楼 voidsky 的回复:
delete m_pImageFrame;
delete m_pImageLoad;
delete m_pImageFrameBeafore;
delete m_pImageFrameBack;
delete m_pImagePhoto; 
graph.ReleaseHDC(m_hdcMemory);
::ReleaseDC(m_hWnd,hdcScreen);
DeleteDC(hdcScreen);
hdcScreen=NULL;
::ReleaseDC(m_hWnd,hdcTemp);
DeleteDC(hdcTemp);
hdcTemp=NULL;
DeleteObject(hBitMap);
DeleteDC(m_hdcMemory);
m_hdcMemory=NULL;

全部释放了


你的程序你认为释放了,但是你确定释放成功吗?DeleteObject(hBitMap)这句就有可能失败
[/Quote]
额,确实没删除成功,那该怎么删除?
Dolphin_001 2010-01-27
  • 打赏
  • 举报
回复
估计楼主是在onpaint里面不停的CreateCompatibleDC和CreateCompatibleBitmap,解决方法有2
1,在onpaint最后参考4楼办法,不可全用上。
2,可在OnInitDialog创建dc,窗口销毁时才释放。避免经常创建和释放,提高效能
菜鸟二号 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 voidsky 的回复:]
delete m_pImageFrame;
delete m_pImageLoad;
delete m_pImageFrameBeafore;
delete m_pImageFrameBack;
delete m_pImagePhoto; 
graph.ReleaseHDC(m_hdcMemory);
::ReleaseDC(m_hWnd,hdcScreen);
DeleteDC(hdcScreen);
hdcScreen=NULL;
::ReleaseDC(m_hWnd,hdcTemp);
DeleteDC(hdcTemp);
hdcTemp=NULL;
DeleteObject(hBitMap);
DeleteDC(m_hdcMemory);
m_hdcMemory=NULL;

全部释放了
[/Quote]

你的程序你认为释放了,但是你确定释放成功吗?DeleteObject(hBitMap)这句就有可能失败
voidsky 2010-01-27
  • 打赏
  • 举报
回复
自己再顶下,咋没人回答呢
ljx0305 2010-01-27
  • 打赏
  • 举报
回复
这个图片又不是一直被改变不要每次都重新加载一次啊 只要在前边进行一次初始化后一直存在内存当然啊直到不用的时候再delete啊,你这样做很费资源
voidsky 2010-01-27
  • 打赏
  • 举报
回复
delete m_pImageFrame;
delete m_pImageLoad;
delete m_pImageFrameBeafore;
delete m_pImageFrameBack;
delete m_pImagePhoto;
graph.ReleaseHDC(m_hdcMemory);
::ReleaseDC(m_hWnd,hdcScreen);
DeleteDC(hdcScreen);
hdcScreen=NULL;
::ReleaseDC(m_hWnd,hdcTemp);
DeleteDC(hdcTemp);
hdcTemp=NULL;
DeleteObject(hBitMap);
DeleteDC(m_hdcMemory);
m_hdcMemory=NULL;

全部释放了
oyster2008 2010-01-27
  • 打赏
  • 举报
回复
检查下还有没有其他GDI+对象没有释放的,不一定是这个
voidsky 2010-01-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wangk 的回复:]
可能是某些地方你异常跳出了。
建议使用auto_ptr之类的进行管理
[/Quote]
没出现异常
wangk 2010-01-27
  • 打赏
  • 举报
回复
可能是某些地方你异常跳出了。
建议使用auto_ptr之类的进行管理

15,979

社区成员

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

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