You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flex.apache.org by "shane doolan (JIRA)" <ji...@apache.org> on 2015/02/20 01:56:11 UTC

[jira] [Updated] (FLEX-34759) ArrayList performance improvements

     [ https://issues.apache.org/jira/browse/FLEX-34759?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

shane doolan updated FLEX-34759:
--------------------------------
    Attachment: FLEX-34759.patch

Uploaded patch for ArrayList in both org.apache.flex.collections and mx.collections 

> ArrayList performance improvements
> ----------------------------------
>
>                 Key: FLEX-34759
>                 URL: https://issues.apache.org/jira/browse/FLEX-34759
>             Project: Apache Flex
>          Issue Type: Improvement
>          Components: Collections
>            Reporter: shane doolan
>              Labels: newbie, patch, performance
>         Attachments: FLEX-34759.patch
>
>
> 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:
>         source.splice(index, 0, item);
>       With this:
>         
>         if (index == length)
>             source.push(item);
>         else if (index == 0)
>             source.unshift(item);
>         else
>             source.splice(index, 0, item);
> addItem is 10x faster when adding non IEventDispatcher's, and 6x faster for IEventDispatcher's
> The trade-off is for purely random add/removes, where the extra logic increases the times taken slightly. For us, addItem is the major use case - this patch speeds up population of all of our ArrayCollections considerably. 
> Patch in on its way, 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)