线程中使用ListCtrl 的SetItemText添加串口发送过来的数据后内存会不断增大。 SetItemTextListControlMFCVS2008 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 数据赋值没有问题,将串口过来的28个数据用SetItemText动态加入到listcontrol后才会出现内存不断增大的现象,如果注释掉这部分代码内存就不会增大了。 m_Datashow.InsertItem(RowItem,str[0]);肯定需要内存啊,List要维护数据内部肯定要开辟空间的,不可能无限让你插入!一般的是设置一个最大值,超过显示的最大行数就删除掉最初掉几行! 首先感谢大家,特别是flydreamGG提出的建议,我在上面的代码后面加上if(RowItem>=100u){ m_Datashow.DeleteItem(0);}这样可以实现后面的数据加入listctrl后内存不增加,但是CPU的使用率会猛增,不知道高手们有什么好的方法可以实现后面的数据加入一行的同时之前的数据会减少一行,而且CPU的使用率不会剧增?再次感谢各位! 是不是加的太频繁,CPU占用太高 嗯,因为单片机是10ms发送一次数据,我做的上位机每次从串口收到数据后就要把接收的数据更新到listcontrol上,在不改变下位机发送数据的时间间隔前提下,有没有什么好的办法可以实现我的要求而CPU的使用率不会猛增呢?请诸位给点建议,小弟感激不尽! 嗯,谢谢各位的回答。小弟再问个问题,我在上面的程序中用new新建了CString型数组str,然后用delete删掉:CString *str=new CString[28];......delete []str;//释放内存空间为什么内存还会不断增加,我把上面两行注释掉,用CString str[28];来定义数组,却不会出现内存增加的情况。请高手指点! 难道局部变量不能用new和delete? 一开始就有人建议你用CStringArray,这个类很好用的,比你那个定义数据指针的方法好的太多太多了至于这个内存增加的情况,我建议你在删除指针之前先把那个cstring对象清空下 谢谢GLSC_CENA,不过我在论坛上看到使用CStringArray后用RemoveAll是删除不掉该数组对象的内存的,我试了下,内存会缓慢增大,也可以参考本论坛的帖子http://bbs.csdn.net/topics/50418186,但是用用CString str[28]的话内存基本不会变化(奇怪的是我最后也没有删除这个数组),欢迎大家一起讨论,再次感谢大家! CString *str=new CString[28];......delete []str;//释放内存空间这样内存会不断增加,我在另外一个程序中使用了以下代码:unsigned int *a=new unsigned int[30];//创建新的内存memset(a,0,sizeof(unsigned int)*30);//初始化数组a,将其30个数组元素值初始化为0......delete []a;//释放内存空间内存同样也会增加。这是为什么呢? VC做UI可真头疼 求VC关于ListView控间的用法的普通例程(VC编程新手:QQ14294770) 向高手求教:如何发出一个midi指令使系统发出相应音符声音 数据库连接问题 如何调用dll,为什么出错 ADO中SQL语句怎么出这种错误! 视图最大化后,如何获取该视图的大小 使用ATL进行com组件开发,对于ActiveX和com对象事件响应 使用pdflib生成pdf,请问要输入外国文字怎么办? 不会真的没人知道吧(关于appwizard,sdi与文档视图) 一个数据库设计,欢迎讨论 MFC怎么绘制类似word中的表格
数据赋值没有问题,将串口过来的28个数据用SetItemText动态加入到listcontrol后才会出现内存不断增大的现象,如果注释掉这部分代码内存就不会增大了。
肯定需要内存啊,List要维护数据内部肯定要开辟空间的,不可能无限让你插入!一般的是设置一个最大值,超过显示的最大行数就删除掉最初掉几行!
首先感谢大家,特别是flydreamGG提出的建议,我在上面的代码后面加上
if(RowItem>=100u)
{
m_Datashow.DeleteItem(0);
}
这样可以实现后面的数据加入listctrl后内存不增加,但是CPU的使用率会猛增,不知道高手们有什么好的方法可以实现后面的数据加入一行的同时之前的数据会减少一行,而且CPU的使用率不会剧增?再次感谢各位!
嗯,因为单片机是10ms发送一次数据,我做的上位机每次从串口收到数据后就要把接收的数据更新到listcontrol上,在不改变下位机发送数据的时间间隔前提下,有没有什么好的办法可以实现我的要求而CPU的使用率不会猛增呢?请诸位给点建议,小弟感激不尽!
CString *str=new CString[28];
......
delete []str;//释放内存空间
为什么内存还会不断增加,我把上面两行注释掉,用CString str[28];来定义数组,却不会出现内存增加的情况。请高手指点!
谢谢GLSC_CENA,不过我在论坛上看到使用CStringArray后用RemoveAll是删除不掉该数组对象的内存的,我试了下,内存会缓慢增大,也可以参考本论坛的帖子http://bbs.csdn.net/topics/50418186,但是用用CString str[28]的话内存基本不会变化(奇怪的是我最后也没有删除这个数组),欢迎大家一起讨论,再次感谢大家!
......
delete []str;//释放内存空间
这样内存会不断增加,我在另外一个程序中使用了以下代码:
unsigned int *a=new unsigned int[30];//创建新的内存
memset(a,0,sizeof(unsigned int)*30);//初始化数组a,将其30个数组元素值初始化为0
...
...
delete []a;//释放内存空间
内存同样也会增加。这是为什么呢?