forked from: String の += と、Array.join で結合するのではどっちが速いか

by uwi
♥0 | Line 66 | Modified 2010-05-10 14:54:10 | MIT License
play

ActionScript3 source code

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

// forked from sugamasao's String の += と、Array.join で結合するのではどっちが速いか
package {
    import com.actionscriptbible.Example;
    import flash.utils.getTimer;
    
    public class FlashTest extends Example {
		private var N : uint = 500000;
    
    		// なぜわざわざ + t.toString()するかわからんので外した。
    		// あとemptyとVectorも追加
    		// pushより最初から領域を確保しておいたほうがはやい
        public function FlashTest() {
            // write as3 code here..
            trace("test start...");
            joinTest("unko");
            joinVecTest("unko");
            plusTest("unko");
            empty("unko");
            ずる("unko");
            trace("test end.");
        }

        private function empty(str:String):String {
	    		var t:int = getTimer();
        		for(var i:uint = 0; i < N; i++){
        			str;
        		}
        		trace("empty=>", getTimer() - t, "ミリ秒");
        		return "";
        }
                
        private function joinTest(str:String):String {
	    		var t:int = getTimer();
	    		var result:String = "";
	    		var array:Array = new Array(N);
        		for(var i:uint = 0; i < N; i++){
        			array[i] = str;
        		}
        		result = array.join("");
        		trace("join=>", getTimer() - t, "ミリ秒")
       		return result;
        }
                
        private function joinVecTest(str:String):String {
	    		var t:int = getTimer();
	    		var result:String = "";
	    		var array:Vector.<String> = new Vector.<String>(N);
        		for(var i:uint = 0; i < N; i++){
        			array[i] = str;
        		}
        		result = array.join("");
        		trace("joinvec=>", getTimer() - t, "ミリ秒")
       		return result;
        }
        
        private function plusTest(str:String):String{
	    		var t:int = getTimer();
	    		var result:String = "";
        		for(var i:uint = 0; i < N; i++){
        			result += str;
        		}
        		trace("plus=>", getTimer() - t, "ミリ秒")
       		return result;
        }
        
        private function ずる(str:String):String{
	    		var t:int = getTimer();
	    		var result:String = "";
	    		var cur : String = str;
	    		for(var j : int = N;j > 0;j >>>= 1){ 
	    			if(j & 1)result += cur;
	    			cur += cur;
	    		}
        		trace("ずる=>", getTimer() - t, "ミリ秒")
       		return result;
        }
        
    }
}

Forked