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

测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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;
}
}

留言

2011-02-11
次访问