频繁载入与释放资源,程序内存占用不断增大?

Soyokaze 2009-06-20 05:57:54
我的一个小程序,因为需要,需要动态载入BMP资源,大概有几十张,都是160x240x8bit的,每次只需显示其中一张。我的处理方法不是在程序启动时全部载入,然后随用随调;而是在需要时用LoadImage()动态载入,用完立即用DeleteObject()释放。
可是,在测试时发现,随着不断的运行,程序的内存占用会从刚启动的不到4000K飙至7000多K。因此想问一下,这是不是正常现象,就是说是我的程序中有泄漏的Bug还是Windows没有实时回收释放的内存块造成的?
...全文
132 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kittyloveu 2009-08-15
  • 打赏
  • 举报
回复
不错,另外我还想知道,在程序里,一些常用的资源,是在启动后一次load完毕好,还是用时才加载好,比如,我重绘系统标题栏按钮的那些图片,我想启动时一次加载完
Soyokaze 2009-06-20
  • 打赏
  • 举报
回复
试验了一下,方法是在一个定时间隔为200ms的回调函数中,添加两句话:

static HBITMAP hBmp
hBmp = LoadImage(g_hInstance, 101, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
DeleteObject(hBmp);


编译,启动。在资源管理器里监视内存占用,发现从启动的3200K增长至4400K左右,并稳定在这个值。最小化后,瞬间降为700多K,然后逐步增长并稳定在2100K。然后最大化,发现保持在2800K就不再上升了。
呵呵,这个大概涉及到Windows内核的内存管理机制。总之,不是偶的程序内存泄漏就行。
  • 打赏
  • 举报
回复
是否是其他地方的GDI资源泄漏
Ryanwen 2009-06-20
  • 打赏
  • 举报
回复
用BoundsChecker检查一下就清楚了,既然这么明显的内存增长,那肯定有泄露
Lin 2009-06-20
  • 打赏
  • 举报
回复
贴代码才是王道
Soyokaze 2009-06-20
  • 打赏
  • 举报
回复
因为仔细查过很多次了,还监视了每个载入的BMP图片的DeleteObject()返回值,没有泄漏的,所以才发贴子询问的。
Lin 2009-06-20
  • 打赏
  • 举报
回复
你自己泄哪里都不知道哇?

看看代码啦

15,471

社区成员

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

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