MFC自定义控件4kb内存泄漏问题

thorhero 2012-11-21 10:06:30
最近发现个很奇怪的问题,wince下用MFC自定一个控件,只要这个控件重画,就有很高的几率占用4kb,时间一长就完蛋。

这个控件甚至不添加任何代码,只要执行Invalidate或者SetWindowText这类导致重画的函数,就出这问题。
不使用自定义控件就没有任何问题。

以前一般自定义一个按钮,但是这按钮刷新并不频繁,这个问题之前一直没发现,现在自定义了一个Text框,然后这Text用的地方挺多,这个问题就非常明显了。

网上查了半天,有很多人用遇到同样问题,但是都没个具体的解答,有说是GDI对象无限增多的,有说MFC的BUG的,还有完全否认这种情况,认为是程序自身内存泄漏的。

想知道如果不是每个人都有这个问题,可能是驱动的问题?
...全文
199 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
thorhero 2012-11-22
  • 打赏
  • 举报
回复
OK搞定了,本来是别人问我,结果还是别人把这个问题搞清楚了。。。 昨天是代码写错了所以显示不出来,用HDC是可以的,但是问题不是出在HDC上面。 昨天看aristolto的帖子不仔细,其实第2条就说了,把Invalidate();改成Invalidate(0); 当没有重写EraseBkgnd消息处理函数时,用Invalidate()是不会出问题的。 当重写了EraseBkgnd消息处理函数,就必须用Invalidate(0)了,只要一擦背景就可能占内存,具体原因不清楚,看高手能解释不,这里把帖先结了。
五香花生米 2012-11-21
  • 打赏
  • 举报
回复
这个我也遇到过可以试试这些办法 http://blog.csdn.net/aristolto/article/details/7416302
David_Hu 2012-11-21
  • 打赏
  • 举报
回复
那有考虑释放一个文本框新建一个呢,释放的同时多的内存是否也释放了
thorhero 2012-11-21
  • 打赏
  • 举报
回复
程序退了当然全部都释放了,但是肯定不希望用一会就强迫程序重启次吧。 窗口不关闭这个内存会无限增加的,本来嵌入式的内存就不多,用不了多久就占满了。
David_Hu 2012-11-21
  • 打赏
  • 举报
回复
我好像试过,多创建几个,然后正常程序退出,看多了多少,然后放在那里不管它,过一会好像就会还原成最开始的内存了 你也可以试一下
thorhero 2012-11-21
  • 打赏
  • 举报
回复
搞整了半天,没解决问题。 这个内存并不会无限增大,用到内存快没了貌似就开始释放了,然后就开始稳定在一个点了。摧毁掉控件不管用,关闭窗口后得等一会占用的内存才会释放。似乎不影响使用,只是觉得内存狂涨很不爽。 改成HDC也试过,是不会内存增加,但是根本画不上去,是我方法弄错了? OnPaint里面本来是 CPaintDC dc(this); dcMem.CreateCompatibleDC(&dc) ... 不管改成 hDC = ::GetDC (m_hWnd); dcMem = ::CreateCompatibleDC(hDC); 还是 CPaintDC dc(this); dcMem = ::CreateCompatibleDC(dc.m_hDC); 都不行。

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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