DirectDraw画1920*1080位图,内存储器资源急剧耗尽,程序崩溃
DirectDraw画1920*1080位图,内存资源急剧耗尽,程序崩溃。
最近在使用directdraw来画高清格式的大图片,由于之前没有用过directdraw,所以对其用法也不甚了解。根据directdraw流程来画图。初始化,创建directdraw对象,设定控制级,创建主表面,创建离屏表面,GetDC()得到DC,然后将pData数据拷贝到离屏DC上,完了之后就ReleaseDC()释放离屏DC,将离屏图案blt到主表面,最后释放所有对象和表面。
可能是内存占用比较多,在线程中调用该绘制函数,几秒钟以后内存就急剧增加,直至崩溃。查看后也没有怎么发现内存泄露,使用的是内存池。
网络上说可能是DC没有释放,可是我已经ReleaseDC了。离屏表面的返回值也是正确的,说明释放完毕。
现在一直没有好的办法,如果有经历过directdraw的朋友,可以告诉我该怎么搞,先谢了。
------解决方案--------------------
相信你操作DC应该没问题
可能是directdraw里面的对象没释放干净
------解决方案--------------------
高清图片是如何加载和释放的, 是否存在泄漏问题
可以试试图片只加载一次,不断的刷新看看效果, 先区分从问题分界
------解决方案--------------------
唉,绘图程序从来就很难调,还是注释掉一段一段排除吧,从简单架构一点点增加
------解决方案--------------------
你的离屏DC是用GetDC得的DC作为参数创建的吧?离屏DC的释放要用DeleteDC,ReleaseDC不行。
------解决方案--------------------
调试一下,看看是在执行什么函数的时候内存急剧增加的
最近在使用directdraw来画高清格式的大图片,由于之前没有用过directdraw,所以对其用法也不甚了解。根据directdraw流程来画图。初始化,创建directdraw对象,设定控制级,创建主表面,创建离屏表面,GetDC()得到DC,然后将pData数据拷贝到离屏DC上,完了之后就ReleaseDC()释放离屏DC,将离屏图案blt到主表面,最后释放所有对象和表面。
可能是内存占用比较多,在线程中调用该绘制函数,几秒钟以后内存就急剧增加,直至崩溃。查看后也没有怎么发现内存泄露,使用的是内存池。
网络上说可能是DC没有释放,可是我已经ReleaseDC了。离屏表面的返回值也是正确的,说明释放完毕。
现在一直没有好的办法,如果有经历过directdraw的朋友,可以告诉我该怎么搞,先谢了。
------解决方案--------------------
相信你操作DC应该没问题
可能是directdraw里面的对象没释放干净
------解决方案--------------------
高清图片是如何加载和释放的, 是否存在泄漏问题
可以试试图片只加载一次,不断的刷新看看效果, 先区分从问题分界
------解决方案--------------------
唉,绘图程序从来就很难调,还是注释掉一段一段排除吧,从简单架构一点点增加
------解决方案--------------------
你的离屏DC是用GetDC得的DC作为参数创建的吧?离屏DC的释放要用DeleteDC,ReleaseDC不行。
------解决方案--------------------
调试一下,看看是在执行什么函数的时候内存急剧增加的