实验二—— vector::reserve()的资源
目的
这个实验的目的是vector在加入大量数据之前调用reserve(),和deque进行比较,看它们的内存分配和执行效率怎么样?
描述
本实验中的测试基本上和实验一相同,除了在测试类的构造函数中加入下面这行代码:
m_vData.reserve(1000000); |
结果
测试程序运行的平台和一些条件:
CPU
| 1.8 GHz Pentium 4 | 内存
| 1.50 GB | 操作系统
| W2K-SP4 | 文件中的行数
| 9874 | 平均每行字母个数
| 1755.85 | 读文件的次数
| 70 | 总共插入的数据个数
| 691180 |
使用Windows任务管理器来记录执行效率,本程序中使用了>Laurent Guinnard 的CDuration类。消耗系统资源如下图:
我们注意到vector不在需要分配花费多余的时间分配内存了,这是由于我们使用了reserve()对于所测试的>691180个数据为我们每一次插入大量数据的时候保留了足够的内存空间,对于deque存储分配的假设,观察这个测试中的内存分配图形和上一个图形,我们需要进一步量化这个测试。
怎样改良内存分配的性能呢?
下面这个图例说明随着数据的增加,容量在增加:
当增加数据的时候对容量的增加在vector和deque执行效率基本一样,然而,vector在插入数据的时候有一些零星的时间消耗,看下面的图例:
通过统计分析vector和deque在插入平均为>1755.85长度的>9874个数据所花费的时间,下面是总结的表格:
Vector
| Deque
| Mean
| 0.603724814 sec
| Maximum
| 0.738313000 sec
| Minimum
| 0.559959000 sec
|
Std. Dev
| 0.037795736 sec
| 6-Sigma
| 0.226774416 sec
|
| Mean
| 0.588021114 sec
| Maximum
| 0.615617000 sec
| Minimum
| 0.567503000 sec
| Std. Dev
| 0.009907800 sec
| 6-Sigma
| 0.059446800 sec
|
|
实验三——内存回收
目的
本实验是对假设deque分配的内存不是临近的,而且很难回收进行量化测试分析。
描述
在本实验中再次用到了实验一中的代码,在调用函数中加入记录增加数据执行的效率具体入下面操作:
for(xRun=0; xRun<NUMBER_OF_XRUNS; xRun++) { df = new CVectorDequeTest; elapsed_time = 0;
for(i=0; i<NUMBER_OF_RUNS*xRun; i++) { cout << "Deque - Run " << i << " of " << NUMBER_OF_RUNS*xRun << "... "; df->ReadTestFile("F://huge.csv",DF_DEQUE); deque_data.push_back(datapoint()); deque_data.back().time_to_read = df->GetProcessTime(); elapsed_time += deque_data.back().time_to_read; deque_data.back().elapsed_time = elapsed_time; cout << deque_data.back().time_to_read << " seconds/n"; } vnElements.push_back(df->GetDequeSize()); cout << "/n/nDeleting... "; del_deque.Start(); delete df; del_deque.Stop(); cout << del_deque.GetDuration()/1000000.0 << " seconds./n/n"; vTimeToDelete.push_back(del_deque.GetDuration()/1000000.0); }
|
结果
本测试和上面两个实验在相同的平台上运行,除了插入的数据由>9874到>691180,需要插入>70次,下面图例显示了>deque在插入数据的时候分配内存的情况,在deque里插入了平均每个长度为>1755.85的字符串。>
尽管从几个曲线图中看到的实际消耗时间不同,但些曲线图都精确到了>R2=95.15%。所给的数据点都实际背离了下表中统计的曲线图数据:
deque Results
| Mean
| 0.007089269 sec
| Maximum
| 11.02838496 sec
| Minimum
| -15.25901667 sec
| Std. Dev
| 3.3803636 sec
| 6-Sigma
| 20.2821816 sec
|
在相同的情况下比较vector的结果是非常有意义的。下面图就是将vector和deque在相同的情况下分配内存消耗的时间比较图:
这些数据在这个测试中是>R2=82.12%。这或许可以经过每个点反复运行得到更加优化,在这个问题中这些数据适当地标注了这些点,所给的数据点都实际背离了下表中统计的曲线图数据:
vector Results
| Mean
| -0.007122715sec
| Maximum
| 0.283452127 sec
| Minimum
| -0.26724459sec
| Std. Dev
| 0.144572356sec
| 6-Sigma
| 0.867434136sec
|
 
2/2 首页 上一页 1 2 |