2013-01-10 68 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