AS3 / Flex性能 - 新的ArrayList与ArrayList.removeAll()

时间:2012-03-21 14:45:46

标签: actionscript-3 flex mobile flex4

实际上更快?只需创建一个新的ArrayList / ArrayCollection或重用现有的ArrayList / ArrayCollection并删除它的元素?

我正在为性能始终存在问题的手机开发,所以我采用最快的方法。

2 个答案:

答案 0 :(得分:5)

Here's an interesting blog post关于清除ArrayList / ArrayCollection的优化。显然,设置mycollection.source = new Array()比使用大型数据集的mycollection.removeAll()快得多,因为removeAll可确保删除所有事件侦听器。

在这种情况下,很可能新的ArrayList会击败ArrayList.removeAll(),但新的源数组可能是更好的选择,因为它对绑定/侦听器的影响应该更小。

答案 1 :(得分:5)

更快mycollection.source = [];(与mycollection.source = new Array()相对)

另一种选择是使用链表和对象池。对象池允许对象重写其属性,而不是删除对象并创建新对象。如果然后将它们保存在链表而不是数组中,那么循环它们要快得多。因此,如果您只想循环遍历一堆对象,请使用链接列表,但如果您需要进行任何排序,那么数组和向量会更快。

另一个问题是内存使用。不仅仅是为了让应用程序运行内存更小,而且声明的对象越多,垃圾收集器在清理时就必须做的工作就越多。