【发布时间】:2016-08-24 15:53:47
【问题描述】:
我注意到数组的执行速度比 Haxe 的链接列表快得多(至少在 cpp 上)。我得到的结果如下。
Main.hx:40: With 1 items, Array is 14% faster than List.
Main.hx:40: With 5 items, Array is 58% faster than List.
Main.hx:40: With 10 items, Array is 59% faster than List.
Main.hx:40: With 100 items, Array is 54% faster than List.
Main.hx:40: With 1000 items, Array is 56% faster than List.
Main.hx:40: With 10000 items, Array is 55% faster than List.
Main.hx:40: With 100000 items, Array is 52% faster than List.
这让我感到眼花缭乱。即使必须连续复制项目,Array 怎么能这么快?那为什么还要使用列表呢?
package tests;
import haxe.Timer;
class Main
{
static function main()
{
var arr:Array<Int> = new Array();
var list:List<Int> = new List();
var result = new List();
for (items in [1, 5, 10, 100, 1000, 10000, 100000]) {
var listtime = timeit(10000, function() {
for (i in 0...items)
list.add(i);
for (x in list)
result.add(x);
result.clear();
list = new List();
});
var arrtime = timeit(10000, function() {
for (i in 0...items)
arr.push(i);
for (x in arr)
result.add(x);
result.clear();
arr = new Array();
});
if (arrtime < listtime)
trace('With $items items, Array is ${Std.int((1-arrtime/listtime)*100)}% faster than List.');
else
trace('With $items items, List is ${Std.int((1-listtime/arrtime)*100)}% faster than Array.');
}
}
static public function timeit<T>(times:Int, f:Void -> T):Float {
var start = Timer.stamp();
for (i in 0...times) {
f();
}
var time = Timer.stamp() - start;
return time;
}
}
【问题讨论】:
-
另外,如果你看看列表是如何在 haxe 中实现的,它们会出于任何原因创建一堆迷你数组,并向每个数组添加 2 个元素,这自然比仅仅添加到数组要慢。
标签: arrays performance list haxe