对于vector和carray之间经常看到大家很难取舍。
今天因为项目关系,原本用carray做的,然后就改成了vector,顺便做了数据记录。
1,vector和carray 中存放的都是一个结构体,里面包含6个CString数据和1个int数据。
2,carray的排序部分是转换成vector排序然后再写回carray的。
3,测试数据为10万条记录,全部由文件读取。
4,测试结果为3部分,每个部分都分为实际处理时间和画面显示完成时间2块。
5,最终显示数据是放在CListCtrl控件中显示。
6,检索部分,检索结果为其中59966条数据,随机分布在数据源中。
           读取        排序            检索
Vector   13.43(1.03)  14.75(4.02)   7.29(0.63)
CArray   14.11(1.15)  15.18(4.38)   7.40(0.69)
                               单位全部为秒。从结果可以看出,Vector或者CArray实际效果差不多,几乎没有什么差异。而数据读出后写到画面上花掉了太多的时间。10万条数据 13秒,6万条 7秒。
顺便问一下,怎样才能提高这部分的速度呢?
显示部分我是用CListCtrl的InsertItem插入在末尾,然后用SetItemText一个一个数据写的。有没有更加快点的方法呢?谢谢大家指教。

解决方案 »

  1.   

    如果动态数组的长度知道的话,用SetSize函数设置大小比使用Add附加成员要快。
      

  2.   

    恩,用下来感觉 vector方便。
    恩,那我也知道。不过现在速度慢在从动态数组中读取数据,然后写到List控件上,时间几乎都花在这里了。
      

  3.   

    试试这样``
    在把记录添加到List里的时候,先对List的界面载个图,然后将该图Paint在原来的List里,并把原先的List隐藏,然后再添加记录,这时弹出一个Model对话框,显示“正在读取数据...”,读取完后,再取消Paint和显示List
      

  4.   

    vector的另一个好处是不依赖于windows,如果你有跨平台的需要,你就会毫不犹豫地选择vector。使用CListCtrl,数据量特别大的时候的确很慢,一种方法是牺牲内存换取效率,把所有的记录都保存到内存中,然后计算出当前应该显示的范围或者记录,只插入这些记录,或者采用分页的方式。记得在C#中有个Grid之类的类,相当的快,不晓得他是怎么写的,呵呵~~~
      

  5.   

    如果是用数据库的话记得数据库的RecorderSet好像支持有分页的操作。我比较懒,我的做法一般是只列出前N条记录,比如前2000,因为通常不会有人一项一项的看那么多的记录,哈哈