为了更好的了解 TQPagedList 在不同页面尺寸下的性能,为其设置一个最佳的默认值,特做此测试。测试样本为10万条记录,统计不同操作的用时,得到结果如下表所示:
我们为了更直观的观察,做成柱状图以便对比,由于追加测试性能基本上没变化,我们就没有做该类型测试的图表:
我们根据上面的图表,进行下简单的总结:
1、我们可以看到,随着页尺寸的增加,插入首个位置测试时,由于内存块移动造成的开销也越来越大,而随机插入和插入排序则在页尺寸为 512 时,达到一个最佳。而删除操作,则在随着页尺寸的增加,开销也在增加,而且随着页尺寸的增加,增幅越来越大。随机访问则随着页面尺寸基本线性下降。
2、根据上面的测试结果,TQPagedList 默认的页面大小决定采用512。但在实际的使用环境中,请根据自己的需求自行决定分页的尺寸。
附:页尺寸为 512 时,TQPagedList 与 TList 及 TQRBTree 性能实测数据
【注】下面数据是更新后的版本,上面图表是更新前的,优化了随机访问性能,由此带来的性能变化对比:
插入首个位置:17.1 -> 16.6(+3%)
随机插入:24.7->21.9(+11%)
排序插入:158.4->156.6(+1%)
删除首个元素:20.1->20.5(-2%)
随机删除:20.8->20.9(-0.5%)
随机访问:11.5->5.3(+53%)):
开始测试(页大小512)…… 测试结果为操作完成用时,每10000条统计一次用时,单位为毫秒 插入初始位置测试 TList 总计用时 2747.5 ms : 27.1 79.3 131.7 184.8 237.4 291.2 346.2 414.6 488.1 547.1 TQPagedList 总计用时 16.6 ms : 1.7 1.6 1.7 1.6 1.7 1.6 1.7 1.7 1.6 1.7 插入初始位置测试完成: TQPagedList 用时为 1,则 TList 用时为 165.51 倍 追加数据测试 TList 总计用时 2.1 ms : 0.2 0.2 0.2 0.2 0.1 0.2 0.5 0.2 0.1 0.2 TQPagedList 总计用时 1.8 ms : 0.2 0.2 0.2 0.1 0.2 0.2 0.2 0.2 0.1 0.2 追加测试完成: TQPagedList 用时为 1,则 TList 用时为 1.17 倍 随机插入测试 TList 总计用时 1338.1 ms : 13.8 39.9 66.1 92.4 120.0 145.6 171.2 197.2 231.8 260.1 TQPagedList 总计用时 21.9 ms : 0.4 0.6 0.9 1.3 1.7 2.2 2.8 3.4 4.0 4.6 随机插入测试完成: TQPagedList 用时为 1,则 TList 用时为 61.10 倍 即时排序插入测试 TList 总计用时 1392.2 ms : 15.3 41.9 68.9 95.9 121.5 147.4 177.1 203.3 237.5 283.4 TQPagedList 总计用时 156.6 ms : 11.6 14.1 14.6 15.7 16.0 15.9 16.4 17.4 17.3 17.6 TQRBTree 总计用时 44.7 ms : 3.0 3.7 4.1 4.4 4.4 4.6 5.1 4.9 4.9 5.5 即时排序插入测试完成: TQRBTree 用时计为 1,则 TList 用时为 31.15 倍,TQPagedList 用时为 3.50 倍 删除首个元素测试 TList 总计用时 2719.5 ms : 538.0 478.2 414.2 343.6 289.6 235.9 183.1 131.8 78.6 26.5 TQPagedList 总计用时 20.5 ms : 2.0 2.0 2.0 2.1 2.0 2.1 2.0 2.1 2.1 2.1 删除首个元素测试完成: TQPagedList 用时为 1,则 TList 用时为 132.66 倍 删除随机元素测试 TList 总计用时 1346.3 ms : 275.3 227.8 198.5 169.7 144.0 118.6 92.8 66.3 39.8 13.5 TQPagedList 总计用时 20.9 ms : 2.1 2.0 2.1 2.1 2.1 2.0 2.1 2.2 2.1 2.1 删除随机元素测试完成: TQPagedList 用时为 1,则 TList 用时为 64.42 倍 随机访问元素测试 TList 总计用时 0.4 ms : TQPagedList 总计用时 5.3 ms : 随机访问元素测试完成: TQPagedList 用时为 1,则 TList 用时为 0.08 倍 测试完成。