HSP のメモリノートパッド命令や += 代入による文字列の足し算って重いんですよね。Module/修正版dirlist2 - HSP開発wikiのモジュールを自分の使いやすいように改造していたのですよ。マイドキュメントの中の1万ぐらいあるファイルを出力しようとしたら、 13 秒もかかりました。で、 noteget 命令を使わず、 getstr 命令にかえたりとか、 += 代入を poke にかえたら 1 秒以内に処理を完了したりとかして...
どういうのが重いかというと、HSP3ラウンジのぷまさんの書き込みにありました。引用します。
詳細な説明は あとでしますが、早いハナシ 大きなメモリをループ内で使う場合。。。
noteadd、notedel、a+=bという書式の文字列の足し算、は使わずにgetstr、memcpy、peek、poke、strmid命令などでスクリを書く。ということと、
メモリの自動拡張(自動増加)機能 これが できるだけ動作することがないように あらかじめ 想定できる大きなサイズのメモリを 明示的にsdim命令等で 確保しておく必要があります。(または HSPのメモリの自動拡張(自動増加)機能が動きだす前に memexpand命令を使って 自分で再確保します)
っということをすれば そこそこ高速になります。(1万倍とか。。。)
ということみたいです。引用元には「メモリーノートパッド命令の問題」や「メモリの自動拡張(自動増加)機能での 激遅の おハナシ」などの話も載っていますので、参考にしてみるといいでしょう。
noteget ではなく、 getstr を使ったりとか、文字列の連結は += 代入ではなく、 poke や memcpy なんかを使う。sdim で十分なサイズのメモリを確保しておいて、それでも足りなくなりそうになったら memexpand で拡張する。面倒でも、こういう細かいところを直せば早くなるということです。大きなメモリをループ内で扱うときには気をつけなければいけませんね。
文字列変数のメモリの自動拡張と同じように、数値の配列変数の要素数の自動拡張でも同じことが言えると思います。こちらもあらかじめ十分な要素数を確保しておけばいいですね。(使う数が決まっている分には問題ないですが)