概要

HSPのFONT命令はその昔「重いのでメインループ内で使用しないほうがいい」と言われていました。 (と私は記憶している。もしかしたら実際は誰もそんなこと言ってなかったのかもしれないが…。 メインループからFONT命令外したら早くなった経験があった…ような…気がするですが、気のせいだったのかもしれないなー。)
そこで、HSP3となった現在では実際どの程度の負荷があるのか、HSP2と比較検証してみました。

検証用ソースコード

HSP2とHSP3の両方で動作します。
まず最初はfont命令の行をコメントアウトして、実行速度の差を確認してください。
確認できたらfont命令の行を有効にして実行してください。

検証環境
OS :Windows Vista
HSP:HSP2.61/HSP3.4

;
;	HSP2とHSP3でFONT命令の速度比較
;1000ループにかかる時間をmsecで取得
;
gosub *time
tm0 = tm
n = 0

*main
	await 0
	
	repeat 32	;1回のループに33回以上font命令を使用すると急に重くなる?
		i = 5*cnt + 10
		font "メイリオ", i
		mes  "メイリオ " + i
;		font "MS Pゴシック", i
;		mes  "MS Pゴシック " + i
	loop
	
	n++
	title ""+n
	if n>=1000 : goto *owari
	goto *main

;-------------------
;	時間計測用タイマー
*time
	;hsp2 or hsp3
	#ifdef __hsp30__
		m = gettime(5)
		s = gettime(6)
		ms= gettime(7)
	#else
		gettime	m, 5
		gettime	s, 6
		gettime	ms, 7
	#endif
	
	tm  = (m*60 + s)*1000 + ms
	return

;-------------------
;	終了
*owari
	gosub *time
	tm = tm - tm0
	color 255, 255, 255 : boxf : color : pos 0,0
	;hsp2 or hsp3
	font "MS ゴシック", 20
	#ifdef __hsp30__
		mes "HSP3"
		mes "time:"+tm + " [m sec]"
	#else
		mes "HSP2"
		mes "time:"+tm + " [m sec]"
	#endif
	mes "end"
	redraw 1
	stop

結論

私の環境(32bit / Vista)ではHSP2の方が速いという結果が得られました。

またメインループ内でのfont命令の実行回数が32回を超えると、HSP3では極端に速度が遅くなる現象が確認できました。 HSP2ではこのような極端な変化は見られませんでした。
32という数字はきりが良いですが、他の環境では異なる結果になる可能性があります。ご注意ください。

原因はよくわかりませんが、とりあえずfont命令について次のことがわかりました。

  • 思ったほど重くないが、HSP2より重くなっている。
  • メインループ内に数個程度のfont命令があっても支障はない。
  • たくさん使っても30個以下程度にしておく。(もしかしたら上限個数は環境依存かも?)
  • それでもたくさん使うほど重くなる。

これだけわかれば今回は十分かな。