vector与CArray的区别(一) -- 效率

vector与CArray的效率差别直是太大了

对于两者,我都没有做其它特殊的设置,就是声明变量,开始使用。我不知道它们分别是怎么分配内存的,但我却知道了它们之间的效率差别。

大概有380000条数据从数据库中读出来,用两种方法写到内存:vector和CArray

vector就用push_back,CArray就用Add。CArray用了大概15分钟,而vector只用了大概35秒。这个差距今天才是第一次真正体验到

第一次记录,供以后自己参考

CArray <type,type> listData;

vector <type> listData;

 

2020.3.9补充:
这大概是2、3年前的事了,所以只说明情况,具体的数字只是说明问题,而不算实际的数据。
很早之前(大约2006年)的时候写了一个文件分析工具(一直用到今天,从开始到现在依然在维护更新中),每找到一条记录就加入到一个vector里,同样使用push_back()。
正常情况下,文件都不会太大,最大很少会超过1GB,产生的记录数量通常在10w以内,多了也就10+w。
这工具在使用过程中,有时候会遇到一些异常的文件,最大的有20+GB,分析过程非常缓慢。后来为了查找慢的问题,有次跟踪了记录分配的vector变量,查看每次push_back()时的速度,发现了一个过去没有认真对待过的问题,就是刚开始时候,这个push_back()速度很快,但是当它里面的记录达到20+w时,特别是50+w之后,速度非常慢,超过100+w后,就要等很久很久了,后来对它进行了修改,每10w分成一个组放在一个vector中,所以当一个文件中有很多记录时,就会有多个vector来存放,这样修改之后,速度快多了。
从这里可以看出,如果只是简单地push_back(),那一个vector尽量不要存太多的内容。

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值