ちょっとずつ手法の違うプログラムを用意して、性能(速度、メモリ)を比較してみました(BIGにて)。
比較項目(列)は、左から
・EXEC ファイルにかかった時間(EXEC.F)
・EXEC スロットにかかった時間(EXEC.S)
・LOAD ファイルにかかった時間(LOAD)
・USE スロットにかかった時間(USE)
・文字描画にかかった時間(PRINT)
・メモリ消費量(MEM)
プログラムの種類は
H):KNJLIB
0):KNJLIBベースの、フォント検索高速化(INSTRを1回のみに)
1):0)の、INSTRをインデックス配列参照にして高速化(配列代入文大量)
2):1)の、フォントデータ(長い文字列)を2文字1整数のDATA文に(ファイル巨大)
3):2)の、DATA文(整数配列)を、DATファイルに(LOADして使用)
4):3)の、ビットテーブル(描画の元になる配列)を256→65536に(やりすぎ^^;)
D):DNL_P
S):1)の、インデックス代入文直接記述をやめて素直にループに
起動(初期化)時間に関する比較項目が無駄に多いけど、短い時間で起動/終了を繰り返すような使い方(IMEとか)をする時に気になるかと思って。
考察。
フォント検索をINSTRからインデックス配列参照にすると、メモリ消費量2倍で描画時間半分くらい。どちらを優先するかだな。フォントデータを整数配列(1要素で32ピクセル)にしても、文字描画の時間はほとんど変わらない(結局8ビットずつ処理してるからか)。但し、ビットテーブルを65536にすると、16ビットずつ処理できるのでかなり速い。でもメモリ使い過ぎ。
起動時間には結構差が出てるが、それはデータの構造とか持ち方とかよりも、結局ファイルサイズが小さい方が速いみたい(直接代入文作戦は失敗)。
それにしてもDNL_Pの文字描画は普通に速い。