在FP10中新加了Vector 网上一度的盛传效率大大的提高,在写3D引擎前,对他们作了效率对比,测试环境是Thinkpad+Vista(64)+Flash CS4
1.先对数字进行测试
var tt:Vector.<int>=new Vector.<int>();
var ss:Array=new Array();
var i:uint;
var time:uint=getTimer();
for(i=0;i<1000000;i++)
tt.push(i);
trace(getTimer()-time);
time=getTimer();
for(i=0;i<1000000;i++)
ss.push(i);
trace(getTimer()-time);
测了10组数据
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
Vector | 112 | 109 | 113 | 110 | 110 | 112 | 109 | 108 | 113 | 108 |
Array | 141 | 137 | 135 | 134 | 138 | 135 | 134 | 136 | 140 | 132 |
Vector比Array快23.4%左右
2.对Number进行测试
var tt:Vector.<Number>=new Vector.<Number>();
var ss:Array=new Array();
var i:uint;
var time:uint=getTimer();
for(i=0;i<1000000;i++)
tt.push(Math.random());
trace(getTimer()-time);
time=getTimer();
for(i=0;i<1000000;i++)
ss.push(Math.random());
trace(getTimer()-time);
测了10组数据
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
Vector | 352 | 343 | 350 | 351 | 358 | 356 | 359 | 348 | 348 | 354 |
Array | 398 | 392 | 395 | 381 | 410 | 401 | 401 | 400 | 391 | 403 |
Vector比Array快12.9%左右
3.对Object进行测试
var tt:Vector<Object>=new Vector.<Object>();
var ss:Array=new Array();
var i:uint;
var time:uint=getTimer();
for(i=0;i<100000;i++)
{
var a:Object=new Object();
a.x=i;
a.y=-i;
tt.push(a);
}
trace(getTimer()-time);
time=getTimer();
for(i=0;i<100000;i++)
{
var b:Object=new Object();
b.x=i;
b.y=-i;
ss.push(b);
}
trace(getTimer()-time);
测了10组数据
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
Vector | 125 | 131 | 126 | 131 | 119 | 124 | 123 | 123 | 124 | 124 |
Array | 81 | 80 | 80 | 82 | 89 | 81 | 82 | 82 | 81 | 82 |
Array比Vector快52%!
但还有一个问题,就是测试的数据量问题,在测试Object时,如果数据量变大到70W左右时,两者的效率持平,数据量再大,Array的速度就没有Vector快
同样的,当数据量降时,变化也不一样
用PS随便画了一下,大概的样子
在少于1000时,Array处理Object要比Vector快10%以上
再就是测试他们的处理排序问题
我们经常用的就是Z排序法
var i:int;
var tt:Vector.Object>=new Vector.Object>();
var ss:Array=new Array();
for (i=0; i<100000; i++) {
var a:Object=new Object();
a.x=i;
a.y=- i;
tt.push(a);
}
for (i=0; i<100000; i++) {
var b:Object=new Object();
b.x=i;
b.y=- i;
ss.push(b);
}
function getorder(xx:Object,yy:Object):Number {
var ax:int=xx.y;
var ay:int=yy.y;
if (ax>ay) {
return 1;
} else if (ax<ay) {
return -1;
} else {
return 0;
}
}
var time:uint=getTimer();
tt.sort(getorder);
trace(getTimer()-time);
time=getTimer();
ss.sort(getorder);
//ss.sortOn("y", Array.DESCENDING | Array.NUMERIC);
trace(getTimer()-time);
测试的数据就没有贴出来,累了
在Array中如果用sort方法,效率和Vector差不多,效率持平,但是如果Array用sortOn方法,速度将提高10倍以上!!!
所以在Object中,还是选择Array,不管是排序还是大量应用Array,而在数据处理,越简单的数据,Vector处理的速度比Array提升的要多
P:个人认为,Vector在建立的时候主要是为了新加进来的Graphic里处理Path和TrianglePath,加快图形绘制和图形影射。
以上的测试都是在自己的机器上测试,并不是专业的,只是一些个人看法。