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

AlB*_*die 3 apache-flex mobile actionscript-3 flex4

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

我正在为性能始终存在问题的手机开发,所以我追求最快的方法.

Sam*_*aan 5

这是一篇关于清理ArrayList/ArrayCollection优化的有趣博客文章.显然,设置mycollection.source = new Array()mycollection.removeAll()使用大型数据集要快得多,因为removeAll可确保删除所有事件侦听器.

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


Dan*_*iel 5

甚至更快mycollection.source = []; (相对于mycollection.source = new Array())

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

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