HSP | 配列変数が「遅い」

HSP | 配列変数が「遅い」

ものスゴい久しぶりに HSP をいじってみました (^^
ちょっと、カンタンな画像処理をするツールが欲しくなったので、HSP で作ろうかと思ったのですが…。
色の情報を配列に入れてから一括で処理すると、とても遅くなるのです。
そこで、配列変数の読み書き速度を測ってみました!
(※ HSP ver.3.4 で確認

読み込み

#include "kernel32.as"

// 配列 (一括)
GetTickCount
s = stat

repeat 1000000
c = 0xFF, 0xFF, 0xFF
loop

GetTickCount
e = stat

mes "" + (e - s) + " ms"

// 配列 (別々)
GetTickCount
s = stat

repeat 1000000
c.0 = 0xFF
c.1 = 0xFF
c.2 = 0xFF
loop

GetTickCount
e = stat

mes "" + (e - s) + " ms"

// 配列を使わない
GetTickCount
s = stat

repeat 1000000
r = 0xFF
g = 0xFF
b = 0xFF
loop

GetTickCount
e = stat

mes "" + (e - s) + " ms"

(※簡単のため、変数名やループが手抜きですが許してください (^^;

(※最初の変数初期化にかかる時間もここでは無視します。一回しか起きないので…。

(いつもはちゃんと変数名付けてますよっ!!

自分の環境では

78 ms
234 ms
135 ms

となりました。
「あれ?配列の方が早い??」
自分は一括代入を使っていたので、この結果を見ると早くなるはず!
じゃあ書き込みか!!

書き込み

計測の都合上、読み書き一回ずつ合わせて時間を測ります。

#include "kernel32.as"

// 配列
GetTickCount
s = stat

repeat 1000000
c = 0xFF, 0xFF, 0xFF
x = c.0
x = c.1
x = c.2
loop

GetTickCount
e = stat

mes "" + (e - s) + " ms"

// 配列を使わない
GetTickCount
s = stat

repeat 1000000
r = 0xFF
g = 0xFF
b = 0xFF
x = r
x = g
x = b
loop

GetTickCount
e = stat

mes "" + (e - s) + " ms"

結果は

344 ms
297 ms

となりました。やっぱり配列の読み込みが遅い!

まとめ

ものスゴく内容薄い記事になってしまいました (^^;
…が、あるプログラム (を書いてる人) にとっては、役に立つと思います。…そう願いたいです (^^;
ここでの結果を信用すると、一回ずつ読み書きするだけでも元がとれませんし、変数でわざわざ置いているという事は何回も値を読み込むことを想定していると思うので、さらに時間がかかってしまいます…。
「配列を使うな」とまで言ってしまうと、かなりプログラミングが辛くなるのでそこまで言えませんが、パッと見、配列でなくても良い・簡単にソースコードを書き換えられる・配列でなくともソースコードがそんなに汚くならない場合などは配列を使わないほうが良さそうです!
ではまたいつか ノシ