サイトマップ
ゲーム
  1. 【RPG】影明かし
  2. 【STG】カゲノムラクモ
メモ

WOLF RPGエディター 処理時間調査

命令10000回あたりの処理時間を調査しました。

変数操作

ウディタ 変数操作画面

演算子

命令 処理時間
[ms]
cself = 999999 1.7
cself += 999999 2.0
cself *= 999999 1.9
cself /= 999999 1.9
cself %= 999999 2.5
cself 下限= 999999 3.2
cself 絶対値= 999999 2.4
cself = 角度[x10] 3.3
cself = sin[x1000] 3.3
cself = 999999 論理積 999999 3.2
cself = 0 ~ 999999 4.4
三角関数や乱数など、特殊な処理を含む演算で若干処理時間が違う程度で、全体としてそれほど差はありません。この傾向はDB操作や条件分岐(変数)でも同様です。

変数タイプ

命令 処理時間
[ms]
cself1(コモンセルフ変数)= 999999 1.7
v (通常変数) = 999999 1.8
sys (システム変数) = 999999 7.5
可変DB[0:0:0](全定数) = 0 16.5
可変DB[V1:V1:V1](全変数) = 0 23.4
cself1 = 999999 (定数) 1.7
cself1 = cself2 (コモンセルフ変数) 1.7
cself1 = v (通常変数) 1.7
cself1 = sys (システム変数) 9.9
cself1 = 1000000 (EV1のセルフ変数) 9.9
cself1 = 8999999 (乱数0~999999) 9.9
cself = 9180000 (主人公X座標) 9.8
変数操作で以下を使うと、処理時間が若干長くなります。
  1. ・システム変数
  2. ・可変DB
  3. ・100万以上の定数

チェックボックス関係

命令 処理時間
[ms]
V[cself=1000000] = 999999 13.0
cself1 ~ cself5 = 0 43.0
cself1 = 0
cself2 = 0
...
cself5 = 0
9.9
cself += 999999 [±に収める] 9.9
cself1 *= cself2 / 100 [実数] 9.9
cself1 *= cself2
cself1 /= 100
3.8
cself = 1000000 [データ呼ばない] 8.8
cself1 = V[cself2=1000000] 11.7
チェックボックスの関わる処理は、全体的に処理が重くなります。 行数や可読性よりも処理時間を優先させたい場合、チェックボックスを使わない処理に置き換えることも必要です。

文字列操作

ウディタ 文字列操作画面

変数タイプ

命令 処理時間
[ms]
cself[5](コモンセルフ変数) = "" 16.8
S[0](文字変数) = "" 16.5
V[3000000](変数指定) = "" 16.7
cself[5] = cself[6](コモンセルフ変数) 16.5
cself[5] = "\cself[6]"
(コモンセルフ変数を特殊文字で代入)
36.3
cself[5] = S[0](文字変数) 16.7
cself[5] = V[3000000](変数指定) 16.8
変数操作と違い、変数タイプによる処理速度の差はほとんどありません。 ただし、文字定数の中で\cself[5]などの特殊文字を扱う場合、処理に時間がかかります。

演算

命令 処理時間
[ms]
cself = (0文字) 16.8
(100文字) 86.3
(0文字) += (1文字) 28.3
(100文字) 98.8
(100文字) += (100文字) 98.5
cself 1行切り出し (1行) 26.5
(100行) 86.2
cself 1文字切り出し (1文字) 23.2
(100文字) 56.3
(100文字) ↓文字全消去 (該当文字無し) 67.8
(全文字消去) 196.9
(100文字) 以下文字置換 (該当文字無し) 72.8
(全文字置換) 176.5
(100文字) 指定まで切出 (1文字目で分割) 31.6
(100文字目で分割) 75.1
(NOT FOUND) 65.8
(100文字) 指定以降切出 (1文字目で分割) 43.0
(100文字目で分割) 32.9
(NOT FOUND) 33.3
演算の対象になる文字列が長いほど、処理に時間がかかることが分かります。DB操作や文字列ピクチャでも同様の傾向があります。

DB操作

ウディタ DB操作画面

DBタイプ

命令 処理時間
[ms]
可変DB[0:0:0] = 0 5.3
cself = 可変DB[0:0:0] 6.1
cself = ユーザDB[0:0:0] 3.9
cself = システムDB[0:0:1] 4.0
DBの種類によらず、ほぼ同速度で読み書きできます。

配列添字

命令 処理時間
[ms]
cself = ユーザDB[0:0:0] 3.9
cself = ユーザDB[cself:0:0] 16.6
cself = ユーザDB[0:cself:0] 5.9
cself = ユーザDB[0:0:cself] 16.5
cself = ユーザDB[cself:cself:cself] 18.5
cself = ユーザDB[名前:名前:名前] 4.0
DBのタイプ番号やデータ番号の指定に関して、以下のような特徴があります。
  1. ・変数による指定は、データ番号(真ん中)に限り定数による指定と同速度で動作します。
  2. ・名前による指定は、定数による指定と同速度で動作します。

データ型

命令 処理時間
[ms]
可変DB[0:0:0](数値書込) = cself 5.3
cself = 可変DB[0:0:0](数値読出) 6.1
可変DB[0:0:1] = S(空文字列書込) 19.8
cself = ユーザDB[0:0:1]
(空文字列読出)
19.8
cself = ユーザDB[0:1:1]
(100文字の文字列読出)
56.4
他と同様、文字列の操作は時間がかかります。

その他

命令 対象DB 処理時間
[ms]
データ数取得 1データ 9.9
100データ 9.9
項目数取得 1項目 9.9
100項目 9.9
データや項目数の取得について、DBサイズによる処理時間の差はありません。

変数操作+

ウディタ 変数操作+画面

キャラ

命令 処理時間
[ms]
X座標 6.6
X座標(精密) 6.6
地面からの高さ 6.6
向き 6.6
画面X座標 6.6
影グラフィック番号 6.6
タイルのタグ番号 16.5
イベントID 6.6
画面内にいる? 6.6
現在の起動ページ 6.6
起動条件 6.6
接触範囲拡張X 6.6
アニメパターン 6.6
移動中? 6.6
タイルのタグ番号取得を除き、処理時間に大きな差はありません。

位置

命令 処理時間
[ms]
イベントID 6.6
通行可能(タイルのみ) 29.8
[精密]通行可能(タイルのみ) 12.0
通行可能(タイル+Ev) 30.5
[精密]通行可能(タイル+Ev) 13.2
最も上のチップ番号 9.8
レイヤー1チップ番号 6.6
最も上のタグ番号 16.5
レイヤー1タグ番号 10.3
[精密]レイヤー1タグ番号 6.6
通行可否の取得は少し処理時間のかかる命令です。また、精密座標で取得するかどうかで、処理時間が変化する命令があります。
命令 処理時間
[ms]
X座標 7.1
画像サイズ横 7.2
パターン番号 7.0
不透明度 6.9
角度 7.1
拡大率 6.9
カーソル重なってる? 9.9
使用されてる? 6.8
処理時間に大きな差はありません。

ピクチャ

命令\画像サイズ 1x1 100x100 1000x1000
X座標 7.1 8.8 9.9
画像サイズ横 7.2 8.8 9.9
カーソル重なってる? 9.9 9.9 9.9
また、ピクチャの大きさを変えた場合でも、データの取得速度に大きな差はありません。

その他

命令 処理時間
[ms]
現在のマップ番号 5.0
再生中BGM番号 4.9
BGM現在再生位置 5.0
BGM曲の長さ 5.0
マウスX座標 5.0
マウス左クリック状態 4.9
マウス座標差分 5.0
マウス座標のEvID 6.0
マップ縦サイズ 4.9
マップEvId 4.9
コモンEvId 5.0
いずれも、同程度の処理時間で取得できます。

条件分岐(変数)

ウディタ 条件分岐画面

分岐の個数

命令 処理時間
[ms]
条件分岐x1 1つ目で一致 7.7
一致しない 6.6
条件分岐x1+1 1つ目で一致 9.9
それ以外の場合 9.9
条件分岐x3+1 1つ目で一致 16.5
2つ目で一致 18.9
3つ目で一致 19.8
それ以外の場合 19.8
以下のような特徴があります。
  1. ・「それ以外の場合」含め、分岐の数が少ないほど処理が高速です。
  2. ・一致する場所が先頭に近いほど処理が高速です。

条件分岐(文字列)

ウディタ 文字列条件分岐画面

文字長と演算子

命令 処理時間
[ms]
(1文字)が (1文字)と同じ 16.5
(1文字)以外 16.5
(1文字)を含む 16.5
(1文字)を先頭に持つ 16.5
(100文字)が (1文字)と同じ 19.5
(100文字)と同じ
[条件満たす]
49.9
(100文字)と同じ
[先頭文字が違う]
50.0
(100文字)と同じ
[末尾文字のみ違う]
50.0
(1文字)以外 19.8
(100文字)以外
[先頭が違う]
50.0
(100文字)以外
[末尾が違う]
50.0
(100文字)以外
[条件を満たさない]
49.9
(1文字)を含む
[先頭に含む]
19.8
(1文字)を含む
[末尾に含む]
52.5
(1文字)を先頭に持つ
[条件満たす]
19.8
(1文字)を先頭に持つ
[条件を満たさない]
51.8
文字列操作と同様、比較対象の文字列が長いほど処理に時間がかかります。

ピクチャ

ウディタ ピクチャ画面

操作方法とピクチャタイプ

\タイプ
命令
通常画像 ウィンドウ 文字列ピクチャ
1x1 100x100 1000x1000 100x100 空文字 1文字 10文字
生成 43.3 49.9 52.3 50.8 33.0 60.7 140.5
移動 13.6 15.4 14.0 15.4 14.6 26.4 84.3
消去 12.6 10.6 10.7 11.0 10.3 10.9 10.6
以下のような性質があります。
  1. ・移動と削除は、生成に比べ処理時間が短くなります。
  2. ・文字列ピクチャは、通常のピクチャと比べて操作に時間がかかります。

備考

ピクチャの生成は、対象画像がメモリに読み出されているか否かでも処理時間が変化します。 元になる画像をあらかじめ不透過度0%のピクチャで読み込んでおけば、画像がメモリにロードされ、以降のピクチャの生成速度が改善されます。

エフェクト(ピクチャ)

ウディタ エフェクト画面
命令 処理時間
[ms]
フラッシュ 8.3
カラー補正 9.8
描画座標シフト 8.1
シェイク 8.0
ズーム 8.4
点滅 8.3
自動拡大縮小 8.1
自動パターン切り替え 8.0
※処理時間の対象は、1x1の通常ピクチャ
エフェクトによるピクチャの更新は、ピクチャの移動に比べて処理時間が短く済みます。

コモンイベント呼出

ウディタ コモンイベント画面

呼出方法

命令 処理時間
[ms]
番号呼出 20.5
Ev名呼出 29.8
名前でのコモンイベント呼出は、番号での呼出に比べ1.5倍程度の時間がかかります。

引数

命令 処理時間
[ms]
数字 x0 20.5
x1 23.3
x2 24.4
x3 26.4
x4 27.7
文字列
(空)
x0 20.5
x1 26.5
x2 33.1
x3 38.0
x4 43.1
文字列
(100文字)
x1 29.8
渡す引数が多いほど処理時間が長くなります。

戻り値

命令 処理時間
[ms]
数値 24.1
数値(受け取らない) 20.6
文字列(0文字) 52.1
文字列(100文字) 95.0
戻り値が有効なコモンイベントでも、「戻り値を受け取らない」とすれば戻り値のないコモンイベントと同程度の処理速度になります。

調査環境

ウディタのバージョン:
  1. Ver2.10 (2013/08/09)
PCのスペック:
  1. OS - Windows 7(32ビット)
  2. CPU - Intel(R) Core(TM) i5 CPU M 460 @ 2.53GHz
測定方法:
  1. ①50000~100000回毎の処理時間をSys29~Sys30(プレイ時間[秒/ミリ秒])で計測
  2. ②10000回相当の処理時間に直す
  3. ③結果を30個集め、平均値を取る