_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:
Woah, I didn't even know you could do that! i've been using splice all this time. Thanks!
ah yes, I linked you too =)
I recommend AS3+ add a clear() or reset() method to the array and vector class using the fastest method.
Not exciting post, but *very* helpful. Thanks!
Post a Comment