本文主要对Qt容器的读写进行测试,Qt 容器兼容 STL ,因此可以类推 STL的存取速度。
1 QVector/ vector
本次测试,写vector 为追加,读也是顺序读取,消耗时间如下:
追加所需时间
时间/毫秒 | 数据量级 |
1 | 万 |
2 | 十万 |
14 | 百万 |
172 | 千万 |
1602 | 亿 |
顺序读取,并复制到新空间,所需时间:
时间/毫秒 | 数据量级 |
167 | 千万 |
1614 | 亿 |
从中可以看出,vector追加和顺序读取时间基本一致, 待测试随机插入, Qt代码如下:
QVector<float> vec1,vec2,vec3,vec4,vec5;
QTime t,t2;
qDebug() << "append";
t = QTime::currentTime();
for(int i = 0; i < 10000; i++){ // 万
vec1 << 10.5 +i;
}
t2 = QTime::currentTime();
qDebug() << t.msecsTo(t2) << t2.second() - t.second() << vec1[1000];
t = QTime::currentTime();
for(int i = 0; i < 100000; i++){ // 十万
vec2 << 10.5 +i;
}
t2 = QTime::currentTime();
qDebug() << t.msecsTo(t2) << t2.second() - t.second() << vec2[10000];
t = QTime::currentTime();
for(int i = 0; i < 1000000; i++){ // 百万
vec3 << 10.5 +i;
}
t2 = QTime::currentTime();
qDebug() << t.msecsTo(t2) << t2.second() - t.second()<< vec3[100000];
t = QTime::currentTime();
for(int i = 0; i < 10000000; i++){ // 千万
vec4 << 10.5 +i;
}
t2 = QTime::currentTime();
qDebug() << t.msecsTo(t2) << t2.second() - t.second()<< vec4[1000000];
t = QTime::currentTime();
for(int i = 0; i < 100000000; i++){ // 亿
vec5 << 10.5 +i;
}
t2 = QTime::currentTime();
qDebug() << t.msecsTo(t2) << t2.second() - t.second()<< vec5[10000000];
qDebug() << "get";
t = QTime::currentTime();
float* p = new float[vec4.count()];
for(int i = 0; i < 10000000; i++){ // 千万
p[i] = vec4[i];
}
t2 = QTime::currentTime();
qDebug() << t.msecsTo(t2) << t2.second() - t.second()<< vec4[1000000] << p[1000000];
未完待续