Array/Vector/AS3DS/ds/dsforas 性能比较

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:Array/Vector/AS3DS/ds/dsforas 性能比较
  • 本文链接:http://zengrong.net/post/1260.htm


AS3DS是我们常用的数据结构,后来polygonal又开发了ds,国人也开发了一套dsforas。那么,这些常用的数据结构与AS3原生的Array和Vector,性能上有何区别?我在网上只找到了这篇,该文也没有给出一个直观的演示,因此决定自己来测试一下。

测试平台:

  • AS3DS: v1.04
  • ds: v1.23
  • dsforas: r25
  • Flash Player: v10.2.152.26
类型 写入(ms) 读取(ms)
Array 452 132
Vector 256 130
SLinkedList 2708 1718
SSL 1266 222
LinkedList 1498 1392

注意:

  • 这次测试只是针对单链表测试了1000000个随机数的顺序写入和读取速度,不能代表整体性能。(链表的性能特点看这里:数据结构的优缺点
  • 使用AS3DS,文件增大4K;使用ds,文件增大16K。
  • AS3DS和ds不能在一个项目中测试,因为很多类名重复,必须分开测试。

测试代码:

package
{
//import de.polygonal.ds.SLinkedList;
//import de.polygonal.ds.SListIterator;

//import de.polygonal.ds.Itr;
//import de.polygonal.ds.SLL;
//import de.polygonal.ds.SLLNode;

import asds.list.LinkedList;
import asds.list.LinkedListIterator;

import flash.display.Sprite;
import flash.utils.getTimer;

public class DSPerformanceTest extends Sprite
{
    public static const MAX_COUNT:int = 1000000;
    public function DSPerformanceTest()
    {
        _array = [];
        _vector = new Vector.(MAX_COUNT, true);
        _sl = new LinkedList(MAX_COUNT);
        //_sl = new SLinkedList();
        //_sl = new SLL();
        var __t:int = 0;
        trace('==================写入性能===============');
        __t = getTimer();
        for(var i:int = 0; i< MAX_COUNT; i++)
        {
            _array[i] = (Math.random()*1024);
        }
        trace('array:', getTimer()-__t);

        __t = getTimer();
        for(var j:int = 0; j< MAX_COUNT; j++)
        {
            _vector[j] = (Math.random()*1024);
        }
        trace('Vector:', getTimer()-__t);

        __t = getTimer();
        for(var k:int=0; k< MAX_COUNT; k++)
        {
            _sl.addAtLast(Math.random()*1024);
//          _sl.addAtFirst(Math.random()*1024);
        }
        trace('LinkList:', getTimer()-__t);

        trace('==================读取性能===============');

        __t = getTimer();
        var __i2:Number=0;
        for(var i2:int=0; i2;
    private var _sl:LinkedList;
    //private var _sl:SLinkedList;
    //private var _sl:SLL;
}
}