as3中四种存储容器的比较(array,object,vector,dictionary)

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 coordinates:Vector.<Number> = new Vector.<Number>();

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.<Number> = new Vector.<Number>(300000, true);

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.<Number> = new Vector.<Number>(MAX_NUM, true);

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,因为它们的运行速度可能更快。

时间: 2024-08-25 01:35:09

as3中四种存储容器的比较(array,object,vector,dictionary)的相关文章

详解Android四种存储方式_Android

在Android程序开发中我们经常遇到四种数据存储方式,每种存储方式都各有不同:以下我分别列举了Android开发中的不同存储方式的特点 一,Preferences Preferences是一个较轻量级的存储数据的方法,具体使用方法: 在A中保存值: SharedPreferences.Editor sharedata = getSharedPreferences("data", 0).edit(); sharedata.putString("name","

[Android]Android数据的四种存储方式

Context ctx=MainActivity.this; ContentResolver resolver =ctx.getContentResolver(); Uri uri=Uri.parse("content://com.example.androidtestdemo"); Cursor c = resolver.query(uri, null, null, null, null); c.moveToFirst(); while(!c.isAfterLast()){ for(

详解Android四种存储方式

在Android程序开发中我们经常遇到四种数据存储方式,每种存储方式都各有不同:以下我分别列举了Android开发中的不同存储方式的特点 一,Preferences Preferences是一个较轻量级的存储数据的方法,具体使用方法: 在A中保存值: SharedPreferences.Editor sharedata = getSharedPreferences("data", 0).edit(); sharedata.putString("name","

C++中四种类型转换 const_cast是否能改变常量

we have four specific castingoperators:dynamic_cast, reinterpret_cast, static_cast and const_cast. Their format is to follow the new type enclosed between angle-brackets (<>) and immediately after, the expression to be converted between parentheses.

Excel中四种常用类型图表的创建方法

Excel中四种常用类型图表的创建方法   上图中的四种不同类型的图表都是根据同一个表格创建的,也就是说,这四种常用的图表是没有特定的数据限制的. 一.创建柱形图 1.将光标定位到要创建图表的数据区域内,然后切换到"插入"选项卡,在"图表"组的"柱形图"下选择一种需要的柱形图类型进行创建. 2.现在工作表中已经插入了一个选择的柱形图. 二.创建条形图 1.将光标定位到表格区域内,然后选择一个合适的条形图类型进行创建. 2.现在工作表中已经插入了一

PS中四种描边方式图文介绍

  这篇教程是图文介绍PS中四种描边方式,教程比较简单,希望对大家有所帮助! 教程结束,以上就是PS中四种描边方式图文介绍,希望对大家有所帮助! 分类: PS入门教程

c++中四种强制类型转换及区别对比

C++四种强制类型 reinterpret_cast<目标类型>(原类型变量)//重解释类型转换  dynamic_cast<new_type>(expression)//动态类型转换  static_cast<new_type>(expression)//静态类型转换  const_cast<new_type>(expression)//返回一个指向非常量的指针   1.const_cast:常量指针被转化成非常量的指针,并且仍然指向原来的对象:常量引用被

Java中四种XML解析技术之不完全测试

xml 在平时工作中,难免会遇到把XML作为数据存储格式.面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历XML这块来测试,因为遍历XML是工作中使用最多的(至少我认为). 预备 测试环境: AMD毒龙1.4G OC 1.5G.256M DDR333.Windows2000 Server SP4.Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8,在Debug模式下测试. XML文件格式如下: <?xml ver

java中四种操作xml方式的比较

xml|比较   1. 介绍 1)DOM(JAXP Crimson解析器)         DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还