2013-01-10 30 views
0

我有一个代码,将一堆对象添加到一个ArrayCollection(与ArrayCollection.addItem())。最初,我没有注意到这段代码的响应时间差异很大。为什么ArrayCollection.addItem比Flex中的Array.push慢?

但随着添加到ArrayCollection中的对象数量增加,例程需要更长的时间来响应。

我不得不放弃ArrayCollection并使用Array,并使用ArrayFush()元素推入数组。

我不明白为什么会发生这种情况。有什么不同?有人可以解释这一点吗?

+2

阵列是原产于动作脚本(如原语)。 ArrayCollection仅仅是一个带有附加功能的Array的Flex包装器。 – RIAstar

+0

如果你显示代码,它会有所帮助。你做过正式的性能测试吗? – JeffryHouser

+0

如果有帮助,可以通过将数组传递给构造函数完全填充数组后创建一个新的ArrayCollection。 如果我不得不猜测为什么会有性能差异,假设你没有做任何其他事情导致它,我想这应该是由于事件,即使可能没有任何事情正在监听更改事件。 – Mifune

回答

1

当处理多个项目时,这首先让我感到困惑。 RIAstar已经触及了这个问题:数组是一个基元,就像int是一个基元。 ArrayCollection是一个可实例化的类,作为Flex框架的一部分,具有更多功能。因为它是一个类,所以它的数据变得越来越慢,因为ArrayCollection的所有类扩展都需要开销和处理。

ArrayCollection的主要增加是你可以add events给他们,你不能在数组上。例如,当您添加,更改或删除ArrayCollection中的项目时,它将派发通过addEventListener函数添加的任何事件。

此外,ArrayCollection还有更多有用的项目管理功能,如filtering,sorting,以及在集合中的位置添加,获取和删除项目而不是其注册索引。

Array和ArrayCollection之间的选择取决于您的编码/应用程序优先级:您需要性能/您是否有很多项目? - >数组可能是你正在寻找的。你需要短/快速编码,更容易与flex对象集成吗? - > ArrayCollection可能是要走的路。

进一步阅读

Some Differences explained

ArrayCollection Reference

The filter function in action

+0

另外,还有一些食物供你思考:你知道吗?String是一个flex类?这不是原始的。我觉得很晚。 –

+0

这是我的一个新信息。感谢分享。 –

+0

@FlorianMertens,String既不是一个复杂的值,也不是一个Flex类。它是一个Actionscript原语。检查文档:http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7f9c.html – AlBirdie