最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
as3中四种存储容器的比较(array,object,vector,dictionary)
时间:2022-06-28 22:13:52 编辑:袖梨 来源:一聚教程网
as3中有四种存放对象的容器:Array,Object,Vector,Dictionary;其他人在博客里提到过几种占cpu以内存或者速度的比较数据。其性能不是差很多,但是对于大型项目,或者需要移植到移动设备上的项目,这方面的优化还是很抢眼的。
首先要按照自己的需要选择合适的类型。
array,一般语言都有,在这里就不要多说了,但是要知道他是索引数组,所以索引尽量使用int,这样可以提高速度,如果使用字符串,那么length方法可能和你想象的不一样(自己可以小测试一下 呵呵)
object就是map,是关联数组。键值是字符串,在他们的测试中效率仅次于Dictionary。
Vector 也是索引数组,但在测试中优势很明显。
Dictionary是一种特殊的数组。他的键值是对象的引用。所以内容和键值发生联系时,就可以用这个,但是要注意他的强引用和弱引用。
在他们的数据中vector是效率最高,但是array是我们常用的,所以针对这两个我们自己用数据权衡一下:
以下代码显示 Array 类的基准:
代码如下 | 复制代码 |
var coordinates:Array = new Array(); var started:Number = getTimer(); for (var i:int = 0; i< 300000; i++) { coordinates[i] = Math.random()*1024; } trace(getTimer() - started); // output: 107 以下代码显示 Vector 类的基准: var started:Number = getTimer(); for (var i:int = 0; i< 300000; i++) { coordinates[i] = Math.random()*1024; } trace(getTimer() - started); // output: 72 |
通过为矢量分配特定长度并将其长度设为固定值,可进一步优化此示例:
代码如下 | 复制代码 |
var coordinates:Vector. var started:Number = getTimer(); for (var i:int = 0; i< 300000; i++) { coordinates[i] = Math.random()*1024; } trace(getTimer() - started); // output: 48 |
如果不提前指定矢量的大小,则矢量大小将在矢量用完空间后增加。每次矢量大小增加时,都将分配一个新的内存块。矢量的当前内容会复制到新内存块中。这种额外的分配和复制数据会降低性能。以上代码通过指定矢量的原始大小针对性能进行了优化。但是,代码没有针对可维护性进行优化。为了还能够提高可维护性,将重用的值存储在常量中:
代码如下 | 复制代码 |
const MAX_NUM:int = 300000; var coordinates:Vector. var started:Number = getTimer(); for (var i:int = 0; i< MAX_NUM; i++) { coordinates[i] = Math.random()*1024; } trace(getTimer() - started); // output: 47 |
所以尽可能尝试使用 Vector 对象 API,因为它们的运行速度可能更快。
相关文章
- 无限暖暖搭乘大鸟巴士怎么玩 公测第三天每日任务做法介绍 12-27
- 奇迹暖暖绚光护佑搭配攻略 奇迹暖暖绚光护佑过关攻略 12-27
- 绝区零月城柳意像影画怎么样 12-27
- 无限暖暖翩翩愿飞去怎么样 12-27
- 黑神话悟空1.0.12.16581版本更新公告 12-27
- 光遇12.27红石碎片在哪里 12-27