解决方案 »

  1.   


    数据赋值没有问题,将串口过来的28个数据用SetItemText动态加入到listcontrol后才会出现内存不断增大的现象,如果注释掉这部分代码内存就不会增大了。
      

  2.   

    m_Datashow.InsertItem(RowItem,str[0]);
    肯定需要内存啊,List要维护数据内部肯定要开辟空间的,不可能无限让你插入!一般的是设置一个最大值,超过显示的最大行数就删除掉最初掉几行!
      

  3.   


    首先感谢大家,特别是flydreamGG提出的建议,我在上面的代码后面加上
    if(RowItem>=100u)
    {
       m_Datashow.DeleteItem(0);
    }
    这样可以实现后面的数据加入listctrl后内存不增加,但是CPU的使用率会猛增,不知道高手们有什么好的方法可以实现后面的数据加入一行的同时之前的数据会减少一行,而且CPU的使用率不会剧增?再次感谢各位!
      

  4.   

    是不是加的太频繁,CPU占用太高
      

  5.   


    嗯,因为单片机是10ms发送一次数据,我做的上位机每次从串口收到数据后就要把接收的数据更新到listcontrol上,在不改变下位机发送数据的时间间隔前提下,有没有什么好的办法可以实现我的要求而CPU的使用率不会猛增呢?请诸位给点建议,小弟感激不尽!
      

  6.   

    嗯,谢谢各位的回答。小弟再问个问题,我在上面的程序中用new新建了CString型数组str,然后用delete删掉:
    CString *str=new CString[28];
    ......
    delete []str;//释放内存空间
    为什么内存还会不断增加,我把上面两行注释掉,用CString str[28];来定义数组,却不会出现内存增加的情况。请高手指点!
      

  7.   

    难道局部变量不能用new和delete?
      

  8.   

    一开始就有人建议你用CStringArray,这个类很好用的,比你那个定义数据指针的方法好的太多太多了至于这个内存增加的情况,我建议你在删除指针之前先把那个cstring对象清空下
      

  9.   


    谢谢GLSC_CENA,不过我在论坛上看到使用CStringArray后用RemoveAll是删除不掉该数组对象的内存的,我试了下,内存会缓慢增大,也可以参考本论坛的帖子http://bbs.csdn.net/topics/50418186,但是用用CString str[28]的话内存基本不会变化(奇怪的是我最后也没有删除这个数组),欢迎大家一起讨论,再次感谢大家!
      

  10.   

    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;//释放内存空间
    内存同样也会增加。这是为什么呢?