EventDispach と Callback のテスト3

by _katsuren forked from EventDispach と Callback のテスト2 (diff: 554)
登録される関数の数やクラスに実装された関数の数を変えて実験してみました。

Event : 通常のイベントを100万回ディスパッチして計測
Event2 : 1000個の関数をaddEventListenerしたもの
Callback : ICallback を実装しない方のCallbackクラスで計測
Callback2 : Callback と同じ内容のクラスに200個余分な関数を追加して計測
Callback3 : Callback に ICallback を実装して計測
Callback4 : Callback2 に ICallback を実装して計測
♥0 | Line 696 | Modified 2011-07-06 20:43:19 | MIT License
play

ActionScript3 source code

/**
 * Copyright _katsuren ( http://wonderfl.net/user/_katsuren )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/42sW
 */

// forked from _katsuren's EventDispach と Callback のテスト2
// forked from _katsuren's EventDispach と Callback のテスト
package {
    import flash.events.Event;
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.events.EventDispatcher;

    public class FlashTest extends Sprite {
        public static const TEST_COUNT:int = 1000000;
        
        private var _tf:TextField = new TextField();
        private var _dispatcher:EventDispatcher;
        private var _callback:Callback;
        private var _callback2:Callback2;
        private var _callback3:Callback3;
        private var _callback4:Callback4;
        
        private var _count:int = 0;
        
        public function FlashTest() {
            _tf.x = 0;
            _tf.y = 0;
            _tf.width = 150;
            _tf.height = 200;
            addChild(_tf);
            
            _dispatcher = new EventDispatcher();
            _dispatcher.addEventListener("test", onEvent);
            
            _callback = new Callback();
            _callback.addCallback("test", onCallback);
            
            _callback2 = new Callback2();
            _callback2.addCallback("test", onCallback);
            
            _callback3 = new Callback3();
            _callback3.addCallback("test", onCallback);
            
            _callback4 = new Callback4();
            _callback4.addCallback("test", onCallback);
            
            stage.frameRate = 1;
            stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
        
        public function onEnterFrame(e:Event):void {
            if (_count == 0)
                testEventDispatcher();
            else if (_count == 1)
                testEventDispatcher2();
            else if (_count == 2)
                testCallback();
            else if (_count == 3)
                testCallback2();
            else if (_count == 4)
                testCallback3();
            else if (_count == 5)
                testCallback4();
            else
                stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
            _count++;
        }
        
        public function testEventDispatcher():void {
            var start:Number = new Date().getTime();
            for (var i:int=0; i<TEST_COUNT; i++) {
                _dispatcher.dispatchEvent(new Event("test"));
            }
            var end:Number = new Date().getTime();
            var time:String = (end-start).toString();
            appendText("Event takes : " + time + "ms");
        }
        public function onEvent(e:Event):void {}
        
        public function testEventDispatcher2():void {
            var e:Event = new Event("test");
            var start:Number = new Date().getTime();
            for (var i:int=0; i<TEST_COUNT; i++) {
                _dispatcher.dispatchEvent(e);
            }
            var end:Number = new Date().getTime();
            var time:String = (end-start).toString();
            appendText("Event2 takes : " + time + "ms");
        }
        
        public function testCallback():void {
            var start:Number = new Date().getTime();
            for (var i:int=0; i<TEST_COUNT; i++) {
                _callback.call("test");
            }
            var end:Number = new Date().getTime();
            var time:String = (end-start).toString();
            appendText("Callback takes : " + time + "ms");
        }
        public function onCallback():void {}
        
        public function testCallback2():void {
            var start:Number = new Date().getTime();
            for (var i:int=0; i<TEST_COUNT; i++) {
                _callback2.call("test");
            }
            var end:Number = new Date().getTime();
            var time:String = (end-start).toString();
            appendText("Callback2 takes : " + time + "ms");
        }
        
        public function testCallback3():void {
            var start:Number = new Date().getTime();
            for (var i:int=0; i<TEST_COUNT; i++) {
                _callback3.call("test");
            }
            var end:Number = new Date().getTime();
            var time:String = (end-start).toString();
            appendText("Callback3 takes : " + time + "ms");
        }
        
        public function testCallback4():void {
            var start:Number = new Date().getTime();
            for (var i:int=0; i<TEST_COUNT; i++) {
                _callback4.call("test");
            }
            var end:Number = new Date().getTime();
            var time:String = (end-start).toString();
            appendText("Callback4 takes : " + time + "ms");
        }
        
        public function appendText(str:String):void {
            _tf.appendText(str+"\n");
        }
    }
}

import flash.events.Event;

class Callback {
    private var _map:Object = {};
    public function Callback() {}
    public function addCallback(type:String, func:Function):Boolean {
        if (_map[type] == undefined)
            _map[type] = new Vector.<Function>();
        _map[type].push(func);
        return true;
    }
    public function removeCallback(type:String, func:Function):Boolean {
        try {
            var list:Vector.<Function> = _map[type] as Vector.<Function>;
            var length:uint = list.length;
        }catch(err:Error){ return false; }
        for (var i:int=0; i<length; i++) {
            if (list[i] == func) {
                list.splice(i, 1);
                return true;
            }
        }
        return false;
    }
    public function call(type:String):void {
        try {
            var list:Vector.<Function> = _map[type] as Vector.<Function>;
            var length:uint = list.length;
        }catch(err:Error){}
        for (var i:int=0; i<length; i++) {
            list[i]();
        }
    }
    public function hasCallback(type:String):Boolean {
        try {
            var list:Vector.<Function> = _map[type] as Vector.<Function>;
            var length:uint = list.length;
        }catch(err:Error) { return false; }
        if (length>0)
            return true;
        return false;
    }
    public function willTrigger(type:String):Boolean {
        return hasCallback(type);
    }
}

class Callback2 {
    private var _map:Object = {};
    public function Callback2() {}
    public function addCallback(type:String, func:Function):Boolean {
        if (_map[type] == undefined)
            _map[type] = new Vector.<Function>();
        _map[type].push(func);
        return true;
    }
    public function removeCallback(type:String, func:Function):Boolean {
        try {
            var list:Vector.<Function> = _map[type] as Vector.<Function>;
            var length:uint = list.length;
        }catch(err:Error){ return false; }
        for (var i:int=0; i<length; i++) {
            if (list[i] == func) {
                list.splice(i, 1);
                return true;
            }
        }
        return false;
    }
    public function call(type:String):void {
        try {
            var list:Vector.<Function> = _map[type] as Vector.<Function>;
            var length:uint = list.length;
        }catch(err:Error){}
        for (var i:int=0; i<length; i++) {
            list[i]();
        }
    }
    public function hasCallback(type:String):Boolean {
        try {
            var list:Vector.<Function> = _map[type] as Vector.<Function>;
            var length:uint = list.length;
        }catch(err:Error) { return false; }
        if (length>0)
            return true;
        return false;
    }
    public function willTrigger(type:String):Boolean {
        return hasCallback(type);
    }
    
    public function a0000():void {}
    public function a0001():void {}
    public function a0002():void {}
    public function a0003():void {}
    public function a0004():void {}
    public function a0005():void {}
    public function a0006():void {}
    public function a0007():void {}
    public function a0008():void {}
    public function a0009():void {}
    public function a0010():void {}
    public function a0011():void {}
    public function a0012():void {}
    public function a0013():void {}
    public function a0014():void {}
    public function a0015():void {}
    public function a0016():void {}
    public function a0017():void {}
    public function a0018():void {}
    public function a0019():void {}
    public function a0020():void {}
    public function a0021():void {}
    public function a0022():void {}
    public function a0023():void {}
    public function a0024():void {}
    public function a0025():void {}
    public function a0026():void {}
    public function a0027():void {}
    public function a0028():void {}
    public function a0029():void {}
    public function a0030():void {}
    public function a0031():void {}
    public function a0032():void {}
    public function a0033():void {}
    public function a0034():void {}
    public function a0035():void {}
    public function a0036():void {}
    public function a0037():void {}
    public function a0038():void {}
    public function a0039():void {}
    public function a0040():void {}
    public function a0041():void {}
    public function a0042():void {}
    public function a0043():void {}
    public function a0044():void {}
    public function a0045():void {}
    public function a0046():void {}
    public function a0047():void {}
    public function a0048():void {}
    public function a0049():void {}
    public function a0050():void {}
    public function a0051():void {}
    public function a0052():void {}
    public function a0053():void {}
    public function a0054():void {}
    public function a0055():void {}
    public function a0056():void {}
    public function a0057():void {}
    public function a0058():void {}
    public function a0059():void {}
    public function a0060():void {}
    public function a0061():void {}
    public function a0062():void {}
    public function a0063():void {}
    public function a0064():void {}
    public function a0065():void {}
    public function a0066():void {}
    public function a0067():void {}
    public function a0068():void {}
    public function a0069():void {}
    public function a0070():void {}
    public function a0071():void {}
    public function a0072():void {}
    public function a0073():void {}
    public function a0074():void {}
    public function a0075():void {}
    public function a0076():void {}
    public function a0077():void {}
    public function a0078():void {}
    public function a0079():void {}
    public function a0080():void {}
    public function a0081():void {}
    public function a0082():void {}
    public function a0083():void {}
    public function a0084():void {}
    public function a0085():void {}
    public function a0086():void {}
    public function a0087():void {}
    public function a0088():void {}
    public function a0089():void {}
    public function a0090():void {}
    public function a0091():void {}
    public function a0092():void {}
    public function a0093():void {}
    public function a0094():void {}
    public function a0095():void {}
    public function a0096():void {}
    public function a0097():void {}
    public function a0098():void {}
    public function a0099():void {}
    
    public function a0100():void {}
    public function a0101():void {}
    public function a0102():void {}
    public function a0103():void {}
    public function a0104():void {}
    public function a0105():void {}
    public function a0106():void {}
    public function a0107():void {}
    public function a0108():void {}
    public function a0109():void {}
    public function a0110():void {}
    public function a0111():void {}
    public function a0112():void {}
    public function a0113():void {}
    public function a0114():void {}
    public function a0115():void {}
    public function a0116():void {}
    public function a0117():void {}
    public function a0118():void {}
    public function a0119():void {}
    public function a0120():void {}
    public function a0121():void {}
    public function a0122():void {}
    public function a0123():void {}
    public function a0124():void {}
    public function a0125():void {}
    public function a0126():void {}
    public function a0127():void {}
    public function a0128():void {}
    public function a0129():void {}
    public function a0130():void {}
    public function a0131():void {}
    public function a0132():void {}
    public function a0133():void {}
    public function a0134():void {}
    public function a0135():void {}
    public function a0136():void {}
    public function a0137():void {}
    public function a0138():void {}
    public function a0139():void {}
    public function a0140():void {}
    public function a0141():void {}
    public function a0142():void {}
    public function a0143():void {}
    public function a0144():void {}
    public function a0145():void {}
    public function a0146():void {}
    public function a0147():void {}
    public function a0148():void {}
    public function a0149():void {}
    public function a0150():void {}
    public function a0151():void {}
    public function a0152():void {}
    public function a0153():void {}
    public function a0154():void {}
    public function a0155():void {}
    public function a0156():void {}
    public function a0157():void {}
    public function a0158():void {}
    public function a0159():void {}
    public function a0160():void {}
    public function a0161():void {}
    public function a0162():void {}
    public function a0163():void {}
    public function a0164():void {}
    public function a0165():void {}
    public function a0166():void {}
    public function a0167():void {}
    public function a0168():void {}
    public function a0169():void {}
    public function a0170():void {}
    public function a0171():void {}
    public function a0172():void {}
    public function a0173():void {}
    public function a0174():void {}
    public function a0175():void {}
    public function a0176():void {}
    public function a0177():void {}
    public function a0178():void {}
    public function a0179():void {}
    public function a0180():void {}
    public function a0181():void {}
    public function a0182():void {}
    public function a0183():void {}
    public function a0184():void {}
    public function a0185():void {}
    public function a0186():void {}
    public function a0187():void {}
    public function a0188():void {}
    public function a0189():void {}
    public function a0190():void {}
    public function a0191():void {}
    public function a0192():void {}
    public function a0193():void {}
    public function a0194():void {}
    public function a0195():void {}
    public function a0196():void {}
    public function a0197():void {}
    public function a0198():void {}
    public function a0199():void {}
}



interface ICallback {
    function addCallback(type:String, func:Function):Boolean;
    function removeCallback(type:String, func:Function):Boolean;
    function hasCallback(type:String):Boolean;
    function willTrigger(type:String):Boolean;
    function call(type:String):void;
}

class Callback3 implements ICallback {
    private var _map:Object = {};
    public function Callback3() {}
    public function addCallback(type:String, func:Function):Boolean {
        if (_map[type] == undefined )
            _map[type] = new Vector.<Function>();
        _map[type].push(func);
        return true;
    }
    
    public function removeCallback(type:String, func:Function):Boolean {
        try {
            var list:Vector.<Function> = _map[type];
            var length:uint = list.length;
        }catch(err:Error){ return false; }
        for (var i:int=0; i<length; i++) {
            if (list[i] == func) {
                list.splice(i, 1);
                return true;
            }
        }
        return false;
    }
    
    public function call(type:String):void {
        try {
            var list:Vector.<Function> = _map[type];
            var length:uint = list.length;
        }catch(err:Error) {}
        for (var i:int=0; i<length; i++) {
            list[i]();
        }
    }
    
    public function hasCallback(type:String):Boolean {
        try {
            var list:Vector.<Function> = _map[type];
            var length:uint = list.length;
        }catch(err:Error) { return false; }
        if (length>0)
            return true;
        return false;
    }
    
    public function willTrigger(type:String):Boolean {
        return hasCallback(type);
    }
}


class Callback4 implements ICallback {
    private var _map:Object = {};
    public function Callback4() {}
    public function addCallback(type:String, func:Function):Boolean {
        if (_map[type] == undefined )
            _map[type] = new Vector.<Function>();
        _map[type].push(func);
        return true;
    }
    
    public function removeCallback(type:String, func:Function):Boolean {
        try {
            var list:Vector.<Function> = _map[type];
            var length:uint = list.length;
        }catch(err:Error){ return false; }
        for (var i:int=0; i<length; i++) {
            if (list[i] == func) {
                list.splice(i, 1);
                return true;
            }
        }
        return false;
    }
    
    public function call(type:String):void {
        try {
            var list:Vector.<Function> = _map[type];
            var length:uint = list.length;
        }catch(err:Error) {}
        for (var i:int=0; i<length; i++) {
            list[i]();
        }
    }
    
    public function hasCallback(type:String):Boolean {
        try {
            var list:Vector.<Function> = _map[type];
            var length:uint = list.length;
        }catch(err:Error) { return false; }
        if (length>0)
            return true;
        return false;
    }
    
    public function willTrigger(type:String):Boolean {
        return hasCallback(type);
    }
    
    public function a0000():void {}
    public function a0001():void {}
    public function a0002():void {}
    public function a0003():void {}
    public function a0004():void {}
    public function a0005():void {}
    public function a0006():void {}
    public function a0007():void {}
    public function a0008():void {}
    public function a0009():void {}
    public function a0010():void {}
    public function a0011():void {}
    public function a0012():void {}
    public function a0013():void {}
    public function a0014():void {}
    public function a0015():void {}
    public function a0016():void {}
    public function a0017():void {}
    public function a0018():void {}
    public function a0019():void {}
    public function a0020():void {}
    public function a0021():void {}
    public function a0022():void {}
    public function a0023():void {}
    public function a0024():void {}
    public function a0025():void {}
    public function a0026():void {}
    public function a0027():void {}
    public function a0028():void {}
    public function a0029():void {}
    public function a0030():void {}
    public function a0031():void {}
    public function a0032():void {}
    public function a0033():void {}
    public function a0034():void {}
    public function a0035():void {}
    public function a0036():void {}
    public function a0037():void {}
    public function a0038():void {}
    public function a0039():void {}
    public function a0040():void {}
    public function a0041():void {}
    public function a0042():void {}
    public function a0043():void {}
    public function a0044():void {}
    public function a0045():void {}
    public function a0046():void {}
    public function a0047():void {}
    public function a0048():void {}
    public function a0049():void {}
    public function a0050():void {}
    public function a0051():void {}
    public function a0052():void {}
    public function a0053():void {}
    public function a0054():void {}
    public function a0055():void {}
    public function a0056():void {}
    public function a0057():void {}
    public function a0058():void {}
    public function a0059():void {}
    public function a0060():void {}
    public function a0061():void {}
    public function a0062():void {}
    public function a0063():void {}
    public function a0064():void {}
    public function a0065():void {}
    public function a0066():void {}
    public function a0067():void {}
    public function a0068():void {}
    public function a0069():void {}
    public function a0070():void {}
    public function a0071():void {}
    public function a0072():void {}
    public function a0073():void {}
    public function a0074():void {}
    public function a0075():void {}
    public function a0076():void {}
    public function a0077():void {}
    public function a0078():void {}
    public function a0079():void {}
    public function a0080():void {}
    public function a0081():void {}
    public function a0082():void {}
    public function a0083():void {}
    public function a0084():void {}
    public function a0085():void {}
    public function a0086():void {}
    public function a0087():void {}
    public function a0088():void {}
    public function a0089():void {}
    public function a0090():void {}
    public function a0091():void {}
    public function a0092():void {}
    public function a0093():void {}
    public function a0094():void {}
    public function a0095():void {}
    public function a0096():void {}
    public function a0097():void {}
    public function a0098():void {}
    public function a0099():void {}
    
    public function a0100():void {}
    public function a0101():void {}
    public function a0102():void {}
    public function a0103():void {}
    public function a0104():void {}
    public function a0105():void {}
    public function a0106():void {}
    public function a0107():void {}
    public function a0108():void {}
    public function a0109():void {}
    public function a0110():void {}
    public function a0111():void {}
    public function a0112():void {}
    public function a0113():void {}
    public function a0114():void {}
    public function a0115():void {}
    public function a0116():void {}
    public function a0117():void {}
    public function a0118():void {}
    public function a0119():void {}
    public function a0120():void {}
    public function a0121():void {}
    public function a0122():void {}
    public function a0123():void {}
    public function a0124():void {}
    public function a0125():void {}
    public function a0126():void {}
    public function a0127():void {}
    public function a0128():void {}
    public function a0129():void {}
    public function a0130():void {}
    public function a0131():void {}
    public function a0132():void {}
    public function a0133():void {}
    public function a0134():void {}
    public function a0135():void {}
    public function a0136():void {}
    public function a0137():void {}
    public function a0138():void {}
    public function a0139():void {}
    public function a0140():void {}
    public function a0141():void {}
    public function a0142():void {}
    public function a0143():void {}
    public function a0144():void {}
    public function a0145():void {}
    public function a0146():void {}
    public function a0147():void {}
    public function a0148():void {}
    public function a0149():void {}
    public function a0150():void {}
    public function a0151():void {}
    public function a0152():void {}
    public function a0153():void {}
    public function a0154():void {}
    public function a0155():void {}
    public function a0156():void {}
    public function a0157():void {}
    public function a0158():void {}
    public function a0159():void {}
    public function a0160():void {}
    public function a0161():void {}
    public function a0162():void {}
    public function a0163():void {}
    public function a0164():void {}
    public function a0165():void {}
    public function a0166():void {}
    public function a0167():void {}
    public function a0168():void {}
    public function a0169():void {}
    public function a0170():void {}
    public function a0171():void {}
    public function a0172():void {}
    public function a0173():void {}
    public function a0174():void {}
    public function a0175():void {}
    public function a0176():void {}
    public function a0177():void {}
    public function a0178():void {}
    public function a0179():void {}
    public function a0180():void {}
    public function a0181():void {}
    public function a0182():void {}
    public function a0183():void {}
    public function a0184():void {}
    public function a0185():void {}
    public function a0186():void {}
    public function a0187():void {}
    public function a0188():void {}
    public function a0189():void {}
    public function a0190():void {}
    public function a0191():void {}
    public function a0192():void {}
    public function a0193():void {}
    public function a0194():void {}
    public function a0195():void {}
    public function a0196():void {}
    public function a0197():void {}
    public function a0198():void {}
    public function a0199():void {}
}

Forked