2006年10月25日
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];
...
}
---)
トラックバック
このエントリーのトラックバックURL:
http://aoi-project.com/presents/mt/mt-tb.cgi/94