FP10中Vector与Array比较

在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,加快图形绘制和图形影射。

以上的测试都是在自己的机器上测试,并不是专业的,只是一些个人看法。

你可能感兴趣的:(Flash)