StringとListの処理速度比較
2014年03月06日
文字列とListの処理速度比較
ゲームなどを作っていると画面のマスの状態を保存して書き変えていく必要があります。
以前に紹介した3目並べの記事でもリストを使って保存していました。
// "-" は空きマス "0"が○ "1"が×
list a = ["-","-","-","0","-","1","-","1","0"];
の様な感じですね。
保存形式はいくつかあるのですが、ぱっと思いつく3種類を比較してみたいと思います。
① string形式でリストに保管
list a = ["0","1","2","3","4","5","6","7","8","9"];
② integer形式でリストに保管
list a = [0,1,2,3,4,5,6,7,8,9];
③ stringで文字列として保管
string a = "abcdefghi";
////////検証スタート///////////
このリスト達の中から1つの文字を抜き出してその文字を消し
また同じ文字を挿入する処理を1万回繰り返した処理時間を計って見ようと思います。
抜き出す文字は5番目の文字(数字)とします。
① string形式でリストに保管
list a = ["0","1","2","3","4","5","6","7","8","9"];
default
{
touch_start(integer total_number)
{
llResetTime();
integer i;
for(i=0; i<10000; i++)
{
integer index = llListFindList(a,["4"]);
if(index != -1)
{
a = llDeleteSubList(a,index,index);
a = llListInsertList(a,["4"],index);
}
}
float time = llGetTime();
llOwnerSay((string)time+"sec");
}
}
② integer形式でリストに保管
list a = [0,1,2,3,4,5,6,7,8,9];
default
{
touch_start(integer total_number)
{
llResetTime();
integer i;
for(i=0; i<10000; i++)
{
integer index = llListFindList(a,[4]);
if(index != -1)
{
a = llDeleteSubList(a,index,index);
a = llListInsertList(a,[4],index);
}
}
float time = llGetTime();
llOwnerSay((string)time+"sec");
}
}
③ stringで文字列として保管
string a = "abcdefghi";
default
{
touch_start(integer total_number)
{
llResetTime();
integer i;
for(i=0; i<10000; i++)
{
integer index = llSubStringIndex(a,"e");
if(index != -1)
{
a = llDeleteSubString(a,index,index);
a = llInsertString(a,index,"e");
}
}
float time = llGetTime();
llOwnerSay((string)time+"sec");
}
}
それぞれ5回ずつやり平均を出して見ました。
①list(string) ②list(string) ③string
[1] 5.177763 5.810026 30.506970
[2] 5.499942 5.264053 30.015890
[3] 4.933554 5.800610 29.890210
[4] 5.394611 5.332576 30.323270
[5] 5.111279 5.769101 30.303750
[平均] 5.223429 5.595271 30.208018
このような結果になりました。
僕は他の言語をよく知らないのでわからないのですが、多分他の言語では完全に反対になる事が多いのではないでしょうか?
llSubStringIndex()よりもllListFindList()の方は早くてさらにinteger形式で保存するよりもstringの方が早い。
しかも文字列とリストではここまでの差が開く。
僕の最初の予想とはかなり違っていたためブログにして見ましたが他のスクリプターの方はどうでしょうか?
こうしたらもっと早いよ!とかこれは違う!というご意見ありましたらIMかコメントで教えて下さいー!!
Posted by TOMOZOO_Lomu at 23:25│Comments(1)
│スクリプト
Comments
アンマリ桁が増えると嫌だけど、
10桁ぐらいならビット演算だったらどうなの?
10桁ぐらいならビット演算だったらどうなの?
Posted by すいか at 2014年03月10日 20:54