当你在客户端循环从大量的数据搜索指定数据的时候,这里有一个你可以提升额外性能的小技巧-那就是进肯能的使用字典和索引数组
尝试着基于其属性寻找正确的对象,而不是在大量的数据间循环,如果使用字典或者是索引数组那么你可以快速的定位你所需要的数据而不需要任何的循环。字典和索引数组允许你在内存中存放 名-值对这样的索引,这样你就可以很快定位指定的数据
在AS中你可以使用Object对象或者是Array对象来快速的创建这两者:
var map : Object = new Object();
map[ key ] = value;
OR
var map : Array = new Array();
map[ key ] = value;
在运行的时候要访问指定的对象,你只需要提供该对象的属性值就可以了:
mySavedValue = map[ key ];
字典类和索引数组非常类似,当然字典类更加强大,字典允许你使用复杂的类作为键。
var map : Dictionary = new Dictionary();
var key1 : Object = new Object();
var key2 : Sprite = new Sprite();
var key3 : UIComponent = new UIComponent();
map[ key1 ] = value1
map[ key2 ] = value2
map[ key3 ] = value3
我发现这一点你在处理多重循环的时候特别有用,例如为了不象这样来做:
for each ( var o1 : Object in myCollection1 )
{
for each ( var o2 : Object in myCollection2 )
{
if ( o2.id == o1.relatedId )
{
//do something with the data that matches
break;
}
}
}
你可以这样做,而且执行速度更快:
var map : Object = new Object();
//first create a map
for each ( var o2 : Object in myCollection2 )
{
map[ o2.id ] = o2;
}
//now, loop over the first collection and use the map
for each ( var o1 : Object in myCollection1 )
{
var foundObject : * = map[ o1.relatedId ];
//now do something with the found object
}
这样你只需要遍历一个结合创建MAP,然后遍历另一个集合来使用其属性来访问Map获得指定内容,而不像原来要一个两重的循环【时间复杂度就从 O(n^2)降到了O(n)】
当 合理的使用的使用这一技巧带来的性能提升,你可能自己都会感到吃惊,你可以用来查找打标签的函数,引用数据,创建数据映射,或者是任意的场景,需要循环遍 历大量数据,如果你能除掉循环,只需要在程序中创建一次引用然后任何地方都可以使用,这可以保证你不把CPU时间浪费在无意义的查找不正确的时间上
当然使用字典对象你也需要注意,在使用完之后你需要释放它,否则可能会造成内存泄漏
原文
var map : Object = new Object();
map[ key ] = value;
var map : Array = new Array();
map[ key ] = value;
mySavedValue = map[ key ];
var map : Dictionary = new Dictionary();
var key1 : Object = new Object();
var key2 : Sprite = new Sprite();
var key3 : UIComponent = new UIComponent();
map[ key1 ] = value1
map[ key2 ] = value2
map[ key3 ] = value3
for each ( var o1 : Object in myCollection1 )
{
for each ( var o2 : Object in myCollection2 )
{
if ( o2.id == o1.relatedId )
{
//do something with the data that matches
break;
}
}
}
var map : Object = new Object();
//first create a map
for each ( var o2 : Object in myCollection2 )
{
map[ o2.id ] = o2;
}
//now, loop over the first collection and use the map
for each ( var o1 : Object in myCollection1 )
{
var foundObject : * = map[ o1.relatedId ];
//now do something with the found object
}
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |