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

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不能在一个项目中测试,因为很多类名重复,必须分开测试。

测试代码:

 1package
 2{
 3//import de.polygonal.ds.SLinkedList;
 4//import de.polygonal.ds.SListIterator;
 5
 6//import de.polygonal.ds.Itr;
 7//import de.polygonal.ds.SLL;
 8//import de.polygonal.ds.SLLNode;
 9
10import asds.list.LinkedList;
11import asds.list.LinkedListIterator;
12
13import flash.display.Sprite;
14import flash.utils.getTimer;
15
16public class DSPerformanceTest extends Sprite
17{
18    public static const MAX_COUNT:int = 1000000;
19    public function DSPerformanceTest()
20    {
21        _array = [];
22        _vector = new Vector.(MAX_COUNT, true);
23        _sl = new LinkedList(MAX_COUNT);
24        //_sl = new SLinkedList();
25        //_sl = new SLL();
26        var __t:int = 0;
27        trace('==================写入性能===============');
28        __t = getTimer();
29        for(var i:int = 0; i< MAX_COUNT; i++)
30        {
31            _array[i] = (Math.random()*1024);
32        }
33        trace('array:', getTimer()-__t);
34
35        __t = getTimer();
36        for(var j:int = 0; j< MAX_COUNT; j++)
37        {
38            _vector[j] = (Math.random()*1024);
39        }
40        trace('Vector:', getTimer()-__t);
41
42        __t = getTimer();
43        for(var k:int=0; k< MAX_COUNT; k++)
44        {
45            _sl.addAtLast(Math.random()*1024);
46//          _sl.addAtFirst(Math.random()*1024);
47        }
48        trace('LinkList:', getTimer()-__t);
49
50        trace('==================读取性能===============');
51
52        __t = getTimer();
53        var __i2:Number=0;
54        for(var i2:int=0; i2;
55    private var _sl:LinkedList;
56    //private var _sl:SLinkedList;
57    //private var _sl:SLL;
58}
59}