Passing Different Object Types

From ActionScript Performance Wiki

Jump to: navigation, search

Contents

Purpose

To see what the decrease in performance is, when an object looses its type while being passed to a function.

Code

package  
{
	import flash.display.Sprite;
 
	public class Test extends Sprite 
	{
		private const TEXT : String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		private const NUMBER : Number = 1234567890;
 
		public function Test()
		{
			trace(new PerformanceComparison(1000000, test1, test2, test3, test4).start());
		}
 
		private function test1():void 
		{
			test1helper(new ValueObject);
		}
 
		private function test2():void 
		{
			test2helper(new ValueObject);
		}
 
		private function test3():void 
		{
			test3helper(new ValueObject);
		}
 
		private function test4():void 
		{
			test4helper(new ValueObject);
		}
 
		/**
		 * Apply directly
		 */
		private function test1helper(obj : ValueObject) : void {
			obj.text = TEXT;
			obj.number = NUMBER;  
		}
 
		/**
		 * Apply with Interface
		 */
		private function test2helper(obj : IValueObject) : void {
			obj.text = TEXT;
			obj.number = NUMBER; 
		}
 
		/**
		 * Apply with TypeCast
		 */
		private function test3helper(obj : Object) : void {
			(obj as ValueObject).text = TEXT;
			(obj as ValueObject).number = NUMBER;
		}
 
		/**
		 * Apply with TypeCast to Interface
		 */
		private function test4helper(obj : Object) : void {
			(obj as IValueObject).text = TEXT;
			(obj as IValueObject).number = NUMBER;
		}
	}
}
 
internal interface IValueObject {
	function get number() : Number;
 
	function set number(n:Number) : void;
 
	function get text() : String;
 
	function set text(str:String) : void;
}
 
internal class ValueObject implements IValueObject {
	private var _number : Number;
	private var _text : String;
 
	public function get number() : Number {
		return _number;
	}
 
	public function get text() : String {
		return _text;
	}
 
	public function set number(n : Number) : void {
		_number = n;
	}
 
	public function set text(str : String) : void {
		_text = str;
	}
}

Results

Compiler version: 3.3.0.485, Player version: MAC 10.0.2.54, Operating System: Mac OS 10.5.8

Test 1
12227 ms, best
Test 2
12334 ms, 01% slower
Test 3
12378 ms, 01% slower
Test 4
12495 ms, 02% slower

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

Test 1
1874 ms, 01% slower
Test 2
1860 ms, best
Test 3
1877 ms, 01% slower
Test 4
1894 ms, 02% slower

Conclusion

Even at 1000000 iterations, the performance gain of keeping the type is minimal.

Personal tools