Vector vs. Array for BitmapData Storage

From ActionScript Performance Wiki

Jump to: navigation, search

Contents

Purpose

Test if a vector has a performance benefit when storing BitmapData objects.

Code

package  
{
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
 
	public class Test extends Sprite 
	{
		private const BITMAP_SIZE:int = 400;
		private const BITMAPS_AMOUNT:int = 20;
		private var bmpdVector:Vector.<BitmapData> = new Vector.<BitmapData>();
		private var bmpdArray:Array = [];
		private var bitmapData:BitmapData;
 
		public function Test()
		{
			var i:int, w:int, h:int;
			var bmpd:BitmapData;
 
			for (i = 0;i < BITMAPS_AMOUNT; i++) 
			{
				bmpd = new BitmapData(BITMAP_SIZE, BITMAP_SIZE, false);
				for (w = 0;w < BITMAP_SIZE; w++) for (h = 0;h < BITMAP_SIZE; h++) bmpd.setPixel(w, h, Math.random() * 0xFFFFFF);
				bmpdVector[i] = bmpd;
				bmpdArray[i] = bmpd;
			}
 
			var tf:TextField = new TextField();
			tf.autoSize = TextFieldAutoSize.LEFT;
			tf.text = new PerformanceComparison(5000000, test1, test2).start();
			addChild(tf);
		}
 
		public function test1():void 
		{
			for (var i:int = 0;i < BITMAPS_AMOUNT; i++) bitmapData = bmpdVector[i];
		}
 
		public final function test2():void 
		{
			for (var i:int = 0;i < BITMAPS_AMOUNT; i++) bitmapData = bmpdArray[i];
		}
	}
}

Results

Compiler version: 4.0.0.13210, Player version: MAC 10.0.32.18, Operating System: Mac OS 10.5.8

Test 1
3659 ms, best
Test 2
3809 ms, 04% slower

Compiler version: 3.3.04852, Player version: WIN 10.0.45.2, Operating System: Windows XP

Test 1
4088 ms, best
Test 2
4210 ms, 03% slower

Conclusion

There is only a marginal increase in performance when using a vector.

Personal tools