ワンポイントテクニック No.004

PRINT文を高速化する

ごく簡単にPRINT文が高速になる方法を紹介します。

例えば、次のようなプログラムがあるとします。

 10 FOR I=0 TO 999
 20 PRINT I
 30 NEXT

 この20行目のPRINT文をPRINT#に変えるだけで高速化ができるのです。ただし、そのためには次のように最初にOPEN命令を実行しておく必要があります。

 5 OPEN "SCRN:" FOR OUTPUT AS #1
 10 FOR I=0 TO 999
 20 PRINT #1,I
 30 NEXT

 簡単に原理を説明すると「SCRN:」がディスプレイドライバであり、それをPRINT#を使って書き込んでいる(要はディスプレイに表示している)のです。
 これにより、最大で2倍以上の高速化が実現できます。一度に表示する量が多いほど速度が向上するので、OPASなどと組み合わせて大量の表示を行えば効果は抜群です。ただし、表示する文字数が少ない場合その効力をあまり発揮出来ませんので過信は禁物です。以下に表示する文字数とそれにかかる時間を記します。

 
PRINTおよびPRINT#の実行時間(単位m秒)
文字表示
文字数 PRINT PRINT# 速度上昇率
1 5.7 6.1 -6.5%
2 7.5 7.0 7.1%
3 9.2 7.8 17.9%
4 10.9 8.6 26.7%
5 12.6 9.5 32.6%
10 21.3 13.7 55.4%
40 74.0 39.9 85.4%
10×4 110.4 47.1 134.3%
数値表示
桁数 PRINT PRINT# 速度上昇率
1 11.0 9.5 15.7%
2 12.7 10.4 22.1%
3 14.3 11.2 27.6%
4 16.0 12.0 33.3%
5 17.7 12.7 39.3%
10 26.1 16.7 56.2%

 上記の表を見てもらえたら分かるように1文字しか表示しないときはかえってPRINT#の方が遅くなるのです。しかし、文字数が増える毎に速度上昇率がアップしているのが一目瞭然ですね。これが、どの程度まで速くなるのかというと1文字増えるごとの表示時間を計算してもらえたら分かりますが、PRINTが1.75m秒でPRINT#が0.867m秒でその割合は約2倍となっています。つまり、表示する文字数が増えれば増えるほど約2倍速に近付く(つまり約100%スピードアップ)わけです。これは、数値表示の場合にも同じような傾向が見られます。
 しかし、同じ40文字を表示するのにも10文字ずつ縦4列に分けた10×4文字表示では上記のものと全く異なる傾向となっています。これは、制御文字を使用しているので実質73文字(制御文字が33文字)となっているのですが、純粋にその33文字の制御文字を表示(?)するのにかかった時間を比べてみると、PRINTが1.1m秒でPRINT#が0.22m秒となっています。何と5倍速になっているのです。つまり、制御文字を多用するような表示(例えばOPASなど)ではPRINTをPRINT#とするだけで2倍速を大きく越えることも可能なわけです。

 このPRINT#を使用する上で注意して置かなくてはいけないことが2点あります。まずは、USINGが使えないこと、もう1つは、これを行った後にセーブやロードをした場合、正常に行うことができませんので、終了時にはCLOSEで閉じておく(またはENDを実行)などの措置を行わなくてはならないということです。
(知っておられると思いますが、電源を切ったときやRUNをしたときには自動的にファイルは閉じられます)


RETURN

inserted by FC2 system