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が必要。


Windows/iPhoneアプリ、ゲーム用フリー音源、ヒーリングミュージックのMeteoric Stream -> 資料室 -> HSP高速化Tips
▲Top