Intのread速度

by zahir forked from 速度比較用テンプレ (diff: 72)
あくまでも参考値。
PCでは効果がなく感じてもスマートフォンとかではあるかも
♥0 | Line 121 | Modified 2010-11-02 00:44:27 | MIT License
play

ActionScript3 source code

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

// forked from zahir's 速度比較用テンプレ
/*
    あくまでも参考値。
    PCでは効果がなく感じてもスマートフォンとかではあるかも
*/
package {
    import flash.utils.ByteArray;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    import flash.display.Sprite;
    import flash.utils.getTimer;
    
    public class FlashTest extends Sprite {
        private const LOOP:int = 1000000;
        private var t:TextField;
        
        public function FlashTest() {
            addChild( ( t= new TextField() ) ).width = t.height = 465;
            addEventListener( MouseEvent.CLICK, onClick );
            ex();
        }
        
        private function onClick( e:MouseEvent ):void
        {
            ex();
        }

        private function ex():void
        {
            var i:int = 0;                                      
            var time1:int;
            var time2:int;
            var recode:Array = [];
            var count:int = 0;
            t.text = "各 " + LOOP + " 回ループ\n\n";
            
            // ここから処理
            var str:String = "";
            var ba:ByteArray = new ByteArray();
            var a:int, r:int, g:int, b:int;
            
            ba.writeByte( 0x33 );
            ba.writeByte( 0x66 );
            ba.writeByte( 0x99 );
            ba.writeByte( 0xCC );
            
            ba.position = 0;
            
            time1 = getTimer();
            for( i = 0; i<LOOP; i++ )
            {
                ba.position = 0;
                a = ba.readByte();
                r = ba.readByte();
                g = ba.readByte();
                b = ba.readByte();
            }
            str = a + " " + r + " " + g + " " + b;
            time2 = getTimer() - time1;
            recode[count++] = new TimeData( "byte * 4", time2, str + "  なんだよこれ・・・");
           
            
            time1 = getTimer();
            for( i = 0; i<LOOP; i++ )
            {
                ba.position = 0;
                a = ba.readUnsignedByte();
                r = ba.readUnsignedByte();
                g = ba.readUnsignedByte();
                b = ba.readUnsignedByte();
            }
            str = a + " " + r + " " + g + " " + b;
            time2 = getTimer() - time1;
            recode[count++] = new TimeData( "U_byte * 4", time2, str );
            
            
            time1 = getTimer();
            var u:Number;
            for( i = 0; i<LOOP; i++ )
            {
                ba.position = 0;
                u = ba.readInt();
                a = (u>>24) & 0xFF;
                r = (u>>16) & 0xFF;
                g = (u>>8) & 0xFF;
                b = (u) & 0xFF;
            }
            str = a + " " + r + " " + g + " " + b;
            time2 = getTimer() - time1;
            recode[count++] = new TimeData( "Int * 1", time2, str );
            
            
            time1 = getTimer();
            var u:Number;
            for( i = 0; i<LOOP; i++ )
            {
                ba.position = 0;
                u = ba.readUnsignedInt();
                a = (u>>24) & 0xFF;
                r = (u>>16) & 0xFF;
                g = (u>>8) & 0xFF;
                b = (u) & 0xFF;
            }
            str = a + " " + r + " " + g + " " + b;
            time2 = getTimer() - time1;
            recode[count++] = new TimeData( "U_Int * 1", time2, str );
            
            // ここまで処理
            
            /* templete
            time1 = getTimer();
            for( i = 0; i<LOOP; i++ )
            {
                
            }
            time2 = getTimer() - time1;
            recode[count++] = new TimeData( "", time2, "" );
            */
            
            if( recode.length )
            {
                listup( recode );
            }
            
            t.appendText("clickで再計算");
        }
        private function listup( recode:Array ):void
        {
            var str:String = "";
            recode.sortOn( "time", Array.NUMERIC );
            var max:int = (recode[ recode.length - 1 ] as TimeData).time;
            for( var i:int = 0, len:int = recode.length; i<len; i++)
            {
                var data:TimeData = recode[i] as TimeData;
                var n:int = max / data.time * 100;
                str += data.title + " :: " + data.time + " ms\n\t\t最低速に比べて約 " + n + " %高速 \n";
                if(data.ms == "") str += "\n";
                else str += "\t\t" + data.ms  + "\n\n";
            }
            t.appendText( str );
        }
    }
}
class TimeData
{
    public var title:String;
    public var time:int;
    public var ms:String; // なんか、おまけ要素
    public function TimeData( title:String = "", time:int = 0 , ms:String = "")
    {
        this.title = title;
        this.time = time;
        this.ms = ms;
    }
}

Forked