1文字ずつ処理するときの速度

AS2で一文字ずつ文字列を解析するときは、String.charAt()で特定の文字を抜き出すより、 一度、splitで1文字ずつに区切ってから、配列アクセスした方が圧倒的に早いみたい。 マルチバイトの判別に時間がかかっていると予想されます。 *ベンチ結果 ---( *bench test_arrayChar [0]47 [1]31 [2]31 [3]31 [4]32 [5]31 [6]31 [7]31 [8]32 [9]31 total=328 *bench test_charAt [0]125 [1]141 [2]93 [3]94 [4]94 [5]203 [6]94 [7]93 [8]79 [9]109 total=1125 ---) *検証に使ったMTASC AS2ソース(両方ともマルチバイトに対応) ---( class CharTest { static function test_charAt() { var s:String = ""; var r:String = ""; for (var j = 0; j < 512; j++) s += "0123456789ABCDEF"; for (var j = 0; j < s.length; j++) { var c = s.charAt(j); r += c; } } static function test_arrayChar() { var s:String = ""; var r:String = ""; for (var j = 0; j < 512; j++) s += "0123456789ABCDEF"; var a = s.split(""); for (var i = 0; i < a.length; i++) { r += a[i]; } } static function bench(func:Function, test_name:String) { // test var counter:Array = new Array(); for (var i = 0; i < 10; i++) { var starttime:Date = new Date(); func(); var endtime:Date = new Date(); counter.push( endtime.getTime() - starttime.getTime() ); } // view result trace("*bench " + test_name); var total:Number = 0; for (var i = 0; i < counter.length; i++) { total += counter[i]; trace("["+i+"]"+counter[i]); } trace("total=" + total); } static function main():Void { bench(test_arrayChar, "test_arrayChar"); bench(test_charAt, "test_charAt"); } } ---) ちなみに、JavaScriptで使えるはずの以下の記法は、AS2では動かなかった。 ---( for (i in s) { x = s[i]; ... } ---)
投稿者:kujira 2006年10月25日 01:09

トラックバック

このエントリーのトラックバックURL:
http://aoi-project.com/presents/mt/mt-tb.cgi/94