社区
界面
帖子详情
GDI+内存释放
voidsky
2010-01-27 04:26:39
我使用GDI+进行画图,贴图都是在一个函数里面。因为刷新原因要不停的调用该函数。
此时问题出现了,资源管理器里面显示程序占用的内存在不停的增长,我跟到程序里面去看
m_pImageFrame = Image::FromFile(L"Skin\\picture.png");每运行一次类似的语句就会增加内存
在此函数的最后我使用了delete m_pImageFrame;但是内存仍然没有释放。程序占用内存仍然在不停的增长
各位高手帮帮忙,在此谢谢了!
...全文
480
17
打赏
收藏
GDI+内存释放
我使用GDI+进行画图,贴图都是在一个函数里面。因为刷新原因要不停的调用该函数。 此时问题出现了,资源管理器里面显示程序占用的内存在不停的增长,我跟到程序里面去看 m_pImageFrame = Image::FromFile(L"Skin\\picture.png");每运行一次类似的语句就会增加内存 在此函数的最后我使用了delete m_pImageFrame;但是内存仍然没有释放。程序占用内存仍然在不停的增长 各位高手帮帮忙,在此谢谢了!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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之类的进行管理
GDI 对象的
释放
与
内存
泄漏的问题
GDI 对象的
释放
与
内存
泄漏的问题研究 最近写了一个GDI 绘图的程序,过程中遇到一个奇怪的问题,就是 定时器定时一会GDI绘的图就消失了。。后来经过分析,原来是 GDI对象数量过多 ,即GDI对象超过10000个 导致
内存
泄漏的问题。找到了问题所在,就好解决了,就是及时
释放
GDI对象。 在创建GDI对象的时候,遵循以下规则: GetDC 得到的DC要用 ReleaseDC CreateCompa...
GDI 对象的
释放
与
内存
泄漏的问题研究
最近写了一个GDI 绘图的程序,过程中遇到一个奇怪的问题,就是 定时器定时一会GDI绘的图就消失了。。后来经过分析,原来是 GDI对象数量过多 ,即GDI对象超过10000个 导致
内存
泄漏的问题。找到了问题所在,就好解决了,就是及时
释放
GDI对象。 在创建GDI对象的时候,遵循以下规则: GetDC 得到的DC要用 ReleaseDCCreateCompatibleDC 要用 DeleteDC...
【WINCE】使用GDI时如何正常
释放
内存
避免
内存
泄漏
【WINCE】使用GDI时如何
释放
内存
避免
内存
泄漏前言正文 前言 最近在做wince平台的上位机开发,因此用到了控件的重绘和图形的绘制,所以使用到了GDI。 但是在程序运行的过程中,发现wince6.0的运行
内存
不断增加,怀疑是GDI使用时,申请的
内存
未及时
释放
导致
内存
泄漏。 这是就需要了解如何正确
释放
申请的
内存
来避免
内存
泄漏。 正文 首先需要清楚的是,无论是CPen还是CBrush等类还是CDC,它们都有自己的申请和
释放
的对应关系: new -> delete; Malloc ->
CPrintDialog之
内存
与GDI对象泄漏
做过打印的同志们应该都有过CPrintDialog类吧,它用起来简单,省时间,如果不需要做非常专业的打印,那么用它就足够了。对于用完CPrintDialog后的
内存
与GDI对象的
释放
问题,我断断续续研究了好久了,下面的绪论不敢说正确,目的是与大家讨论,希望大家发现我的问题并指教,谢谢。 注:本文讨论的都是在对话框里实现打印,也就是说,在没有任何MFC生成的代码支
GDI对象错误:CBRUSH
释放
、CreateSolidBrush的
内存
释放
与
内存
泄露问题及其解决方法
今天编了一个小程序,
内存
消耗却很大,随着时间用的越来越久,
内存
消耗越来越大。研究了一下,原来CBRUSH对象没有
释放
。原来程序如下:HBRUSH CPORTSetting::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){HBRUSH hbr ; COLORREF backColor =(COLORREF) GetSysColor(COLOR_...
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章