社区
界面
帖子详情
GDI+内存释放
voidsky
2010-01-27 04:26:39
我使用GDI+进行画图,贴图都是在一个函数里面。因为刷新原因要不停的调用该函数。
此时问题出现了,资源管理器里面显示程序占用的内存在不停的增长,我跟到程序里面去看
m_pImageFrame = Image::FromFile(L"Skin\\picture.png");每运行一次类似的语句就会增加内存
在此函数的最后我使用了delete m_pImageFrame;但是内存仍然没有释放。程序占用内存仍然在不停的增长
各位高手帮帮忙,在此谢谢了!
...全文
438
17
打赏
收藏
GDI+内存释放
我使用GDI+进行画图,贴图都是在一个函数里面。因为刷新原因要不停的调用该函数。 此时问题出现了,资源管理器里面显示程序占用的内存在不停的增长,我跟到程序里面去看 m_pImageFrame = Image::FromFile(L"Skin\\picture.png");每运行一次类似的语句就会增加内存 在此函数的最后我使用了delete m_pImageFrame;但是内存仍然没有释放。程序占用内存仍然在不停的增长 各位高手帮帮忙,在此谢谢了!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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之类的进行管理
异常A generic error occurred in
GDI+
的解决办法
异常A generic error occurred in
GDI+
的解决办法
Broland C++ Builder 中的 Gdiplus(
GDI+
)浅析
Broland C++ Builder 中的 Gdiplus(
GDI+
)浅析.
GDI+
开发库
GDI+
开发库
GDI+
绘制圆角矩形
GDI+
绘制圆角矩形
GDI+
库文件
GDI+
是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章