MFC占用内存过高

zyy9303 2013-03-05 12:36:56
通过逐行调试,就是这段代码占用了太多的CPU资源,
CRect pArea(CPoint(15,15),CPoint(200,800));

m_Bill= new CListCtrl;
::InvalidateRect(::GetActiveWindow(),pArea,TRUE);
m_Bill->Create(WS_VISIBLE|WS_BORDER|LVS_EX_GRIDLINES,pArea,this,100901);
m_Bill->ShowWindow(SW_SHOW);
m_Bill->ModifyStyle(0,LVS_REPORT);
m_Bill->SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|
LVS_EX_HEADERDRAGDROP|LVS_EX_ONECLICKACTIVATE|LVS_EX_GRIDLINES);
//定义各列名称
m_Bill->InsertColumn(0,_T("姓名") ,LVCFMT_CENTER, 100,0);
m_Bill->InsertColumn(1,_T("时间"),LVCFMT_CENTER,85,1 );
UpdateData();

这段代码是在窗口的OnPaint中,程序是一个基于单文档的程序,不含视图/问档结构。代码通过编译且正常显示,只是占用过高的CPU!
...全文
448 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyy9303 2013-03-10
  • 打赏
  • 举报
回复
问题已经解决了
mlqxj35674 2013-03-07
  • 打赏
  • 举报
回复
此段代码写在paint中,四核机器都会被你搞崩,不崩天理不容
Kaile 2013-03-06
  • 打赏
  • 举报
回复
onpaint大约一秒调用 20次,你new一下可能都要 几十MS,如何能不卡
  • 打赏
  • 举报
回复
是啊,在OnPaint中不能调用InvailidateRect,后者被调用后发送WM_PAINT消息,调用OnPaint消息接口函数
zyy9303 2013-03-06
  • 打赏
  • 举报
回复
引用 10 楼 Bokutake 的回复:
那你就直接把这个ListCtrl写成FrameWnd的成员变量。并在InitInsance里面初始化它。 另外不要在OnPaint里InvalidateRect,因为它的意思是使一块区域无效,这样就会重新调用OnPaint了。另外ListCtrl会自动反应数据变化或者刷新,没有必要去要处理OnPaint什么的。 另外我建议你创建一个基于文档/视图的程序,视图选择CFo……
我尝试了,不显示。这该怎么处理?
  • 打赏
  • 举报
回复
为什么要new呢? 你定义一个局部变量不行么?
Thinco 2013-03-05
  • 打赏
  • 举报
回复
在OnPaint里面调用InvalidateRect,那cpu可能停下来么,相当于死循环了
shn521 2013-03-05
  • 打赏
  • 举报
回复
new和delete配对使用,你还在OnPaint中调用,不内存泄露才怪呢。
shn521 2013-03-05
  • 打赏
  • 举报
回复
m_Bill= new CListCtrl;
jimette 2013-03-05
  • 打赏
  • 举报
回复
引用 9 楼 zyy9303 的回复:
我设计时不是对话框,是文档类,没有onintitdlg函数
oncreate
辰岡墨竹 2013-03-05
  • 打赏
  • 举报
回复
那你就直接把这个ListCtrl写成FrameWnd的成员变量。并在InitInsance里面初始化它。 另外不要在OnPaint里InvalidateRect,因为它的意思是使一块区域无效,这样就会重新调用OnPaint了。另外ListCtrl会自动反应数据变化或者刷新,没有必要去要处理OnPaint什么的。 另外我建议你创建一个基于文档/视图的程序,视图选择CFormView,这样客户区就和一个对话框差不多,可以直接把列表控件放在上面了。更简单一些。
zyy9303 2013-03-05
  • 打赏
  • 举报
回复
我设计时不是对话框,是文档类,没有onintitdlg函数
Eleven 2013-03-05
  • 打赏
  • 举报
回复
引用 6 楼 zyy9303 的回复:
不在OnPaint函数中调用那应该在哪里调用?
比如在OnInitDialog函数中调用
Thinco 2013-03-05
  • 打赏
  • 举报
回复
初始化时候调用
引用 6 楼 zyy9303 的回复:
不在OnPaint函数中调用那应该在哪里调用?
zyy9303 2013-03-05
  • 打赏
  • 举报
回复
不在OnPaint函数中调用那应该在哪里调用?
youngwolf 2013-03-05
  • 打赏
  • 举报
回复
还没见过这样的代码,我以为又找到vc的BUG了呢。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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