Saturday, July 26, 2008

Performance Benchmark on Resetting an Array in ActionScript 3

_localArray.length = 0; // Reset the array to empty

Yesterday I was coding on a rather large application at work and I needed to reset an array I had that was stored as a member variable. My gut instinct was to just take the Array variable and set its length = 0. Although this worked I wasn't sure if it was the best way to reset an array in ActionScript 3. So I asked my friend Guy Wyatt and he sent me this performance benchmark using 100,000 iterations in an Array as a test to see the time it took to clear out this Array using various techniques.

Resetting an empty array over 100,000 iterations in a while(i--) loop
length = 0:  15 ms
splice:  157 ms
new:  145 ms

So it looks like my gut instinct was right to set the length to 0 to reset my Array. I know this isn't the most glamorous blog post but I do think it is important to think about these things while coding a large Flex application. Every little bit of optimization is crucial and can over all help yield a better functioning application.

Follow Up:

It's worth noting that after some digging the Flex Framework's ArrayCollection removes all of the items from an array using this code in the ArrayList.as class:

/**
     *  Remove all items from the list.
     */
    public function removeAll():void
    {
        if (length > 0)
        {
            var len:int = length;
            for (var i:int = 0; i < len; i++)
            {
                stopTrackUpdates(source[i]);
            }

            source.splice(0, length);
            internalDispatchEvent(CollectionEventKind.RESET);
        }   
    }

 

I'm not sure if this is the recommended way of doing things for clearing items from an Array but it appears setting length to 0 works and also takes less time.


4 comments:

Lordy said...

Woah, I didn't even know you could do that! i've been using splice all this time. Thanks!

Jonathan said...

ah yes, I linked you too =)

dorkie dork from dorktown said...

I recommend AS3+ add a clear() or reset() method to the array and vector class using the fastest method.

ColoradoCelt said...

Not exciting post, but *very* helpful. Thanks!