shane doolan created FLEX-34759:
-----------------------------------

             Summary: 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


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)

Reply via email to