`
txf2004
  • 浏览: 7028481 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

字典和索引数组-提升性能小技巧

阅读更多

字典和索引数组-提升性能小技巧

| | Comments (2)
<!-- AddThis Bookmark Button BEGIN --> AddThis Social Bookmark Button <!-- AddThis Bookmark Button END -->
当你在客户端循环从大量的数据搜索指定数据的时候,这里有一个你可以提升额外性能的小技巧-那就是进肯能的使用字典和索引数组

尝试着基于其属性寻找正确的对象,而不是在大量的数据间循环,如果使用字典或者是索引数组那么你可以快速的定位你所需要的数据而不需要任何的循环。字典和索引数组允许你在内存中存放 名-值对这样的索引,这样你就可以很快定位指定的数据

在AS中你可以使用Object对象或者是Array对象来快速的创建这两者:

varmap:Object=newObject();
map[key]
=value;

OR

varmap:Array=newArray();
map[key]
=value;

在运行的时候要访问指定的对象,你只需要提供该对象的属性值就可以了:

mySavedValue=map[key];

字典类和索引数组非常类似,当然字典类更加强大,字典允许你使用复杂的类作为键。

varmap:Dictionary=newDictionary();

varkey1:Object
=newObject();
varkey2:Sprite
=newSprite();
varkey3:UIComponent
=newUIComponent();

map[key1]
=value1
map[key2]
=value2
map[key3]
=value3
我发现这一点你在处理多重循环的时候特别有用,例如为了不象这样来做:

foreach(varo1:ObjectinmyCollection1)
...{
foreach(varo2:ObjectinmyCollection2)
...{
if(o2.id==o1.relatedId)
...{
//dosomethingwiththedatathatmatches
break;
}

}

}

你可以这样做,而且执行速度更快:

varmap:Object=newObject();

//firstcreateamap
foreach(varo2:ObjectinmyCollection2)
...{
map[o2.id]
=o2;
}


//now,loopoverthefirstcollectionandusethemap
foreach(varo1:ObjectinmyCollection1)
...{
varfoundObject:
*=map[o1.relatedId];
//nowdosomethingwiththefoundobject
}

这样你只需要遍历一个结合创建MAP,然后遍历另一个集合来使用其属性来访问Map获得指定内容,而不像原来要一个两重的循环【时间复杂度就从 O(n^2)降到了O(n)】

当合理的使用的使用这一技巧带来的性能提升,你可能自己都会感到吃惊,你可以用来查找打标签的函数,引用数据,创建数据映射,或者是任意的场景,需要循环遍历大量数据,如果你能除掉循环,只需要在程序中创建一次引用然后任何地方都可以使用,这可以保证你不把CPU时间浪费在无意义的查找不正确的时间上

当然使用字典对象你也需要注意,在使用完之后你需要释放它,否则可能会造成内存泄漏

Associative Arrays

| | Comments (2)
<!-- AddThis Bookmark Button BEGIN --> AddThis Social Bookmark Button <!-- AddThis Bookmark Button END -->
Here's a quick tip to help you squeeze extra performance out of your Flex/ActionScript applications when looping over and crunching lots of data on the client side. Use the dictionary class or associative arrays when you can!

Rather than looping through lots of data, trying to find the right object based on its properties, you can use associative arrays to find what you are looking for quickly and easily, without looping over anything. Associative arrays (also know as hashes or maps) allow you to create key value-pairs used to create a lookup table for data/objects in memory.

In ActionScript, you can use either a generic object class or an array to create a simple map using string based keys for your object values. Here's an example:

var map : Object = new Object();
map[ key ] = value;
OR

var map : Array = new Array();
map[ key ] = value;
When you want to access your object at runtime, you just need to provide the key to retrieve the hashed value:

mySavedValue = map[ key ]; 
The dictionary class is very similar to an associative array, however a bit more powerful. The dictionary allows you to create maps based on complex objects as the keys for the key-value pair. For example:

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
I've found this to be really helpful in scenarios where you may have had nested loops to process data. Rather than doing something like this:

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;
}
}
}
You could do this, which would execute much faster:

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
}
Rather than looping over an unknown amount of items in 2 collections, you just loop over one collection and build the map, then loop over the other collection and access the properties of the map.

You might be surprised the difference in performance that this can make when used properly. You can use this for specialized label functions, looking up reference data, creating data maps, or just about any scenario where you would have to loop over lots of data. If you can get away with it, only build the map once, then access it any time you can throughout the application; this will ensure that you aren't wasting cpu looping through data when you don't need be.

When using the dictionary class, you also need to be careful and clean up after yourself. Otherwise you can end up with memory leaks. You can check out the livedocs for more information.
分享到:
评论

相关推荐

    易语言字典数组算法模块源码

    通过对这个模块的学习和实践,你不仅能提升易语言的编程技能,还能深入理解字典数组这一重要数据结构的实现细节,为后续的软件开发打下坚实的基础。同时,这也是一种很好的学习如何将理论知识应用于实际编程实践的...

    易语言字典数组算法模块源码-易语言

    通过学习和理解这些代码,开发者不仅可以掌握易语言的编程技巧,还能深入理解字典数据结构和哈希算法,这对于提升编程能力非常有帮助。同时,这样的模块也可以作为易语言项目中的通用组件,提高代码复用性和效率。

    数据结构与算法-python

    - **列表(List)**: 动态数组,可以存储任意类型的对象,支持索引和切片操作,提供插入和删除元素的方法。 - **元组(Tuple)**: 不可变序列,类似于列表但一旦创建就不能修改。 - **集合(Set)**: 无序不重复元素集...

    文本数组排序模块测试程序

    在IT行业中,数组排序是一个非常基础且重要的概念,特别是在编程领域。...通过学习和研究这个资源,开发者可以提升自己的编程技能,更好地理解和运用排序算法,同时也能掌握测试技巧,提高软件质量。

    Lua性能优化技巧(三):关于表

    4. **避免不必要的表创建**:如果需要创建大量小表,应当注意频繁的表创建和销毁会带来显著的性能损耗。如果可以的话,尽量重用表对象。 5. **正确使用表构造语法**:在某些情况下,Lua无法自动推断出数组部分的...

    objc.io 集合类型优化swift

    在Swift编程语言中,集合类型是开发者日常工作中不可或缺的一部分,包括数组(Array)、字典(Dictionary)和集合(Set)。这些数据结构的高效使用对于应用性能有着直接影响。"objc.io 集合类型优化swift" 提供了...

    写出高性能SQL语句的35条方法

    例如,通过合理设计存储过程或函数,一次获取多个结果集,减少I/O操作,从而提升性能。 #### 调整ARRAYSIZE参数 **方法八:优化数组大小** 在SQL*Plus、SQL*Forms和Pro*C中调整ARRAYSIZE参数,可以增加每次数据库...

    python cookbook 英文版

    《Python Cookbook》是一本深入解析Python编程语言的权威指南,其英文版提供了丰富的代码示例和实践技巧,帮助读者更深刻地理解Python的核心概念和高级功能。本书通过一系列实用的编程“食谱”(recipes),涵盖了从...

    数据结构1800题完整答案.rar

    5. **散列表(哈希表)**:通过散列函数实现快速查找,常用于缓存、数据库索引等场景,其性能与散列函数的选择和冲突解决策略有关。 6. **排序算法**:包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆...

    数据结构与C语言结合ARM开发

    在《数据结构与C语言结合ARM开发》中,跳表作为一种优化数据结构,通过在有序链表上添加多级索引来提升搜索、插入和删除的效率。跳表利用随机技术决定哪些节点添加向前指针,使得在平均情况下,搜索、插入和删除操作...

    数据结构及算法经典.zip

    - 深入研究算法的实现,可以提高编程技巧,理解如何优化代码以提高性能。 4. **应用领域**: - 数据结构和算法广泛应用于操作系统、数据库、编译器、网络、人工智能等多个领域。 - 在实际开发中,如Web服务器的...

    Advanced Data Structures

    《高级数据结构》是一本深度探索数据结构领域的经典教材,主要面向研究生级别的学习者。它不仅涵盖了基础数据...通过学习这些数据结构和算法,不仅可以提升编程技巧,也为解决现实世界中的复杂计算问题打下坚实基础。

    Java版-剑指offer数据结构与算法 视频教程 下载 百度网盘链接2.zip

    数组是最基础的数据结构,它提供固定大小的存储空间,通过索引进行访问;链表则在内存中分散存储,通过指针连接,插入和删除操作更为灵活。栈是一种后进先出(LIFO)的数据结构,适合处理递归和回溯问题;队列则是...

    数据结构1800题及其答案(供以分享,绝对全面)

    - **数组**:是最基础的数据结构,它允许通过索引访问元素,具有固定大小和连续的内存空间。 - **链表**:由一系列节点组成,每个节点包含数据和指向下一个节点的引用,不需连续内存空间。 - **栈**:后进先出...

    PHP array操作10个小技巧分享

    在编程世界中,PHP作为一种广泛使用的服务器端脚本语言,尤其在处理数组方面提供了丰富的方法和技巧。掌握PHP数组的操作对于...在实际应用中,根据具体需求灵活运用这些操作,可以大大提升开发的便捷性和程序的性能。

    数据结构及算法经典_C实例.rar

    数据结构与算法是计算机科学的基础,对于理解和解决复杂问题至关重要。C语言作为一种强大的、低级的语言,被广泛用于实现这些概念,因为它...通过阅读和分析这些实例,你将能够提升编程技巧,更好地应对各种复杂问题。

    一些编程小资料

    在编程领域,不断学习和积累小知识、小技巧是提升编程技能的重要途径。"一些编程小资料"这个压缩包文件,很可能包含了一系列有助于理解和优化编程实践的文档或资源。"xscfreedom"标签可能代表了这些资料的来源或者...

    无涯教程(LearnFk)-Python数据科学教程完整离线版.pdf

    通过这些知识点的学习,读者可以掌握Python中数据操作的核心概念和技巧,为进行更深入的数据分析和模型建立打下坚实的基础。无论是新手还是有经验的数据科学家,都能从这本教程中获得宝贵的知识和技能提升。

    吉林大学数据结构课件ppt

    数组是一种简单的数据结构,允许我们通过索引快速访问元素;链表则在内存中不连续存储,适合频繁插入和删除操作;栈是后进先出(LIFO)的数据结构,常用于函数调用和表达式求值;队列是先进先出(FIFO)的数据结构,...

Global site tag (gtag.js) - Google Analytics