FP10中Vector与Array比较

本文通过实验对比了FP10中Vector与Array在处理不同数据类型时的性能表现,结果显示对于简单数据类型如int和Number,Vector处理速度更快;而处理复杂数据类型如Object时,Array在小数据量下表现更优。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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组数据

 

 12345678910
Vector112109113110110112109108113108
Array141137135134138135134136140132

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组数据

 12345678910
Vector352343350351358356359348348354
Array398392395381410401401400391403

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组数据

 12345678910
Vector125131126131119124123123124124
Array81808082898182828182

Array比Vector快52%!

但还有一个问题,就是测试的数据量问题,在测试Object时,如果数据量变大到70W左右时,两者的效率持平,数据量再大,Array的速度就没有Vector快

同样的,当数据量降时,变化也不一样
Untitled-2 copy   用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,加快图形绘制和图形影射。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值