スクリプトの実行速度一覧

投稿者:Material 305033 1 mini cfm_ 投稿日:2016/03/02 17:40

それぞれの、実行にかかる時間です。
かかる時間は相対的な値として見てください。
計測方法は、ノベルゲームのイベントスクリプトで、
"x=10"などを64行コピーして、それを5000回くらいループさせました。(実行が遅い物は少ないです)
もっとそれぞれで差が出ると思っていましたが、ほとんどが同じくらいになったので、細かい書き方には神経質にならなくても良さそうです。


No種類スクリプト1回目2回目
00代入x=10152137
01加算代入x=1+2253239
02x=9999+2999258270
03減算代入x=10-20256245
04x=12.345-3.5168231308
05乗算代入x=10*20253250
06x=3363*0.1234567338285
07除算代入x=10/3231278
08x=3363/2378230273
09剰余代入x=95123%13275274
10x=951.23%7.13273262
11text作成削除x=createText(20,20,100,100);deleteText(x)2552427719
12text作成x=createText(20,20,100,100)96589259
13text入力setText(x,"aaaaa")155170
14text削除(11)から(12)を引いたもの1586618460
15空ループwhile false do i=1;end141116
1610ループx=0;while x<10 do x=x+1;end51215435
1750ループx=0;while x<50 do x=x+1;end2589928854
181ループA(16)の10分の1512544
191ループB(17)の50分の1517577
20空白代入x=""136186
21文字代入x="aaaaa"121137
22100文字代入(21)を、"a"100文字で実行124141
23true代入x=true122132
24フラグ代入setFlag("flag", true)172189
25フラグ取得getFlag("flag")150117
26通常変数代入setVariable("var", 100)225188
27通常変数取得x=getVariable("var")168198
28配列作成x=createArray()122112
29配列作成setVariable("var",createArray())214241
30関数実行func() (def func();end)273264
31関数代入x=func() (def func();return 10;end)343434
32関数代入x=func(5) (def func(x);return x;end)512429
33関数・引数10x=func(5,5..)(def func(a,b..);return a;end)9511103
35時刻取得x=getTime()160125
36乱数x=rand()144165
37切り捨てx=floor(2.56)173167
38PC時刻(ミリ)x=getLocalCurrentTimeMillisecond()155119
39sin()x=sin(2.11)250254
40円周率x=pi()113108
41平方根x=sqrt(2)179173
42tan()x=tan(2.31)248201
43asin()x=asin(0.34)215175
44toString()x=toString(123)257204
45toNumber()x=toNumber("123")205197
46if文if false then x=10;end146162
47if代入if false then x=10;end382370
48if文(47)から(1)代入を引いたもの230233
49配列取得x=a[2]310291
50配列入力a[2]=10173182
51通常配列取得x=getVariable("var")[2]431340
52通常配列入力getVariable("var",100)[2]=10408449
53sprite作消x=createSprite();deleteSprite(x)389327
54sprite切取setSpriteRect(x,..)7431079
55sprite配置setSpritePosition(x,100,100)279270

注:
(12)テキスト作成:作成可能数制限を無視して作成しました。制限(二百個くらい?)を超えると、で過去のものから自動で消えていきます。
(13)テキスト入力:事前にx=createText(20,20,100,100)を実行しました。
(14)空ループ:while falseなので、この行は完全に無視されます。
(25)フラグ取得:事前にsetFlag("flag", true)を実行しました。

(27)通常変数取得:事前にsetVariable("var", 100)を実行しました。
(30~)関数:def func();endは、
def func()
end

ということ。
(33)関数・引数10:引数は10個ですが、省略しています。
(49,50)事前にa=createArray();a[2]=222を実行
(51,52)事前にsetVariable("var",createArray());getVariable("var")[2]=222を実行

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Cdv30200 aoi icon mini aoihikawa(投稿日:2016/03/02 18:13, 履歴)
実験されている結果どおり、
textの作成~削除は極端に処理が遅いため、

ループ外で予めtextを作成しておき、
ループ内でのtextの削除には
"空白文字"の上書きを行うことで
時間の短縮を行っています
Cdv30200 aoi icon mini aoihikawa(投稿日:2016/03/02 18:16, 履歴)
さらに細かい部分まで突き詰めるなら、

ローカル変数<通常変数<関数実行 の順に処理が遅くなるので、

ゲームのセーブ情報として必要ない部分においては
可能な限りローカル変数を使用すること、

文字数の削減などを考えても
「sv()」等の省略するだけの関数は
ループ内で多用しないこと

こういったことも重要になってきます
Material 305033 1 mini cfm_(投稿日:2016/03/03 13:21, 履歴)
関数の実行に思っていたよりも時間がかかるので、置換して減らすことが大切ですね。
関数外でも関数内でも実行速度は変わらなかったので、呼び出し回数を減らすべきです。

忘れていたので、配列の代入・取得をしてみると、多少遅かったです。必要なので使いますが。