-
HSP高速化Tips
長い事HSPでプログラミングをしていると、
「この処理、もうちょっと早く出来ないかなぁ・・・。」とか思う時があります。(^^;
どうやら、HSPはソースコードの記述の仕方によって若干の速度の違いがあるようですので、
実際に、それぞれの処理の速度を計測してみる事にしました。
同じ処理を80000回ループした場合の最高処理時間(単位:1/1000秒)
命令 |
処理時間 |
命令 |
処理時間 |
命令 |
処理時間 |
命令 |
処理時間 |
a=1 |
160 |
a="" |
199 |
if a or 0 |
251 |
print "" |
5795 |
a==1 |
161 |
a="123456789ABCDEF" |
219 |
if a & 0 |
224 |
mes "" |
5650 |
a=1,1 |
260 |
a=="" |
199 |
if a && 0 |
265 |
pos 0,0 |
240 |
a.0=1 |
190 |
if a=0 |
217 |
if a | 0 |
254 |
line 0,0,0,0 |
15407 |
a.0=1 : a.1=1 |
344 |
if a==0 |
217 |
if a || 0 |
294 |
color 0 |
3329 |
a+=1 |
167 |
if a!=0 |
225 |
if(a=0) |
277 |
color 0,0,0 |
3373 |
a-=1 |
166 |
if a<0 |
223 |
dim a,64 |
319 |
|
|
a=a+1 |
231 |
if a<=0 |
219 |
dim a,32,2 |
386 |
|
|
a=a-1 |
231 |
if a=0 : else |
240 |
sdim a,64 |
275 |
|
|
a=1+1 |
212 |
if a and 0 |
225 |
sdim a,32,2 |
345 |
|
|
上記の表は、「同じ処理を80000回ループした時の処理時間を計測する」
(実質的には、8000回ループさせた実行結果を10回計測した時の合計時間)
という動作を何度か繰り返した時の、最も早かった処理時間を1/1000秒単位で記載しています。
この表で、以下の事が分かると思います。
変数関連
- 「a=1」と「a==1」の処理速度は、大して変わりはない。
- 「a.0=1 : a.1=1」を「a=1,1」という風に省略する事で、高速化できる。
- 「a=a+1」より、「a+=1」の方が早い。
- 数値型変数への代入より、文字列型変数への代入の方が遅い。
- 文字列型変数への代入は、代入する文字数に比例して速度が低下する。
- 文字列型配列変数の割り当ては、数値型配列変数の割り当てよりも早い。
IF文
- 「==」の方が、「!=」より早い。
- 「=<」の方が、「<」より早い。
- if文を二度使用するより、else文を使って一つにまとめた方が効率が良い。
- AND回路の方が、OR回路より早い。
- 無闇に括弧を使わない方が良い。
その他
■言い訳
著者のPCがロースペックである為に、
十分な結果が得られませんでした。(^^;
ですので、もし時間に余裕があり、なおかつPCのスペックに自身がある方は、
自分で計測してみる事をおすすめします。
あっ、ちなみに、今回は自前のHSPベンチマークプログラムを使用して計測しました。
宜しければ参考にしてみてください。ソースはこちら!→HSPベンチマークプログラム
※loadlib及び、llmodが必要。