今天顺便作了个 vector 和 carray的速度对比

狐狸大仙 2007-02-06 01:11:05
对于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一个一个数据写的。有没有更加快点的方法呢?

谢谢大家指教。
...全文
948 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zx_sanjin 2007-02-07
  • 打赏
  • 举报
回复
如果是用数据库的话记得数据库的RecorderSet好像支持有分页的操作。

我比较懒,我的做法一般是只列出前N条记录,比如前2000,因为通常不会有人一项一项的看那么多的记录,哈哈
zx_sanjin 2007-02-07
  • 打赏
  • 举报
回复
vector的另一个好处是不依赖于windows,如果你有跨平台的需要,你就会毫不犹豫地选择vector。

使用CListCtrl,数据量特别大的时候的确很慢,一种方法是牺牲内存换取效率,把所有的记录都保存到内存中,然后计算出当前应该显示的范围或者记录,只插入这些记录,或者采用分页的方式。

记得在C#中有个Grid之类的类,相当的快,不晓得他是怎么写的,呵呵~~~
CrazyAzreal 2007-02-07
  • 打赏
  • 举报
回复
试试这样``
在把记录添加到List里的时候,先对List的界面载个图,然后将该图Paint在原来的List里,并把原先的List隐藏,然后再添加记录,这时弹出一个Model对话框,显示“正在读取数据...”,读取完后,再取消Paint和显示List
狐狸大仙 2007-02-07
  • 打赏
  • 举报
回复
还有人帮顶么?
没人就结贴了,参与的都有分哦。
狐狸大仙 2007-02-07
  • 打赏
  • 举报
回复
赫赫,谢谢大家的回复。
狐狸大仙 2007-02-06
  • 打赏
  • 举报
回复
恩,用下来感觉 vector方便。
恩,那我也知道。不过现在速度慢在从动态数组中读取数据,然后写到List控件上,时间几乎都花在这里了。
syy64 2007-02-06
  • 打赏
  • 举报
回复
如果动态数组的长度知道的话,用SetSize函数设置大小比使用Add附加成员要快。
cutftp 2007-02-06
  • 打赏
  • 举报
回复
vector比cArray要方便吧

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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