You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flex.apache.org by "Piotr Zarzycki (JIRA)" <ji...@apache.org> on 2015/02/26 22:05:05 UTC
[jira] [Resolved] (FLEX-34759) ArrayList/ArrayCollection
performance improvements
[ https://issues.apache.org/jira/browse/FLEX-34759?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Piotr Zarzycki resolved FLEX-34759.
-----------------------------------
Resolution: Fixed
Assignee: Piotr Zarzycki
Pushed into develope branch -> http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/74ec7c72
> ArrayList/ArrayCollection performance improvements
> --------------------------------------------------
>
> Key: FLEX-34759
> URL: https://issues.apache.org/jira/browse/FLEX-34759
> Project: Apache Flex
> Issue Type: Improvement
> Components: Collections
> Affects Versions: Apache Flex 4.14.0
> Reporter: shane doolan
> Assignee: Piotr Zarzycki
> Labels: newbie, patch, performance
> Fix For: Apache Flex 4.15.0
>
> Attachments: FLEX-34759.patch, FLEX-34759_v2.patch, ListProfiler.zip
>
>
> Considerable performance gains can be achieved by avoiding the use of array splice when adding/removing items from the start or end of the source array in ArrayList.
> eg/ in ArrayList.addItemAt, replace this:
> {code}
> source.splice(index, 0, item);
> {code}
> with this:
> {code}
> if (index == length)
> source.push(item);
> else if (index == 0)
> source.unshift(item);
> else
> source.splice(index, 0, item);
> {code}
> ArrayList.addItem is 10x faster when adding non IEventDispatcher's, and 6x faster for IEventDispatcher's. There is a small trade-off when performing random access add/removes, where the extra logic slightly increases the times taken.
> Since ArrayCollection wraps an ArrayList by default and ArrayCollection.addItem is used extensively within our apps, this patch has provided considerable performance improvements.
> See profiling results below:
> *Original ArrayList, adding/removing 100k ints*
> * addItemAtStart = "2434ms"
> * addItemAtEnd = "2501ms"
> * addItemAtRandom = "3149ms"
> * removeItemAtStart = "3098ms"
> * removeItemAtEnd = "2401ms"
> * removeItemAtRandom = "2606ms"
> *Original ArrayList, adding/removing 100k IEventDispatcher's*
> * addItemAtStart = "2501ms"
> * addItemAtEnd = "2505ms"
> * addItemAtRandom = "3165ms"
> * removeItemAtStart = "3053ms"
> * removeItemAtEnd = "2453ms"
> * removeItemAtRandom = "2709ms"
> *Patched ArrayList, adding/removing 100k ints*
> * addItemAtStart = "226ms"
> * addItemAtEnd = *"213ms"*
> * addItemAtRandom = "3281ms"
> * removeItemAtStart = "803ms"
> * removeItemAtEnd = "219ms"
> * removeItemAtRandom = "2808ms"
> *Patched ArrayList, adding/removing 100k IEventDispatcher's*
> * addItemAtStart = "415ms"
> * addItemAtEnd = *"488ms"*
> * addItemAtRandom = "3662ms"
> * removeItemAtStart = "878ms"
> * removeItemAtEnd = "264ms"
> * removeItemAtRandom = "2949ms"
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)