マクロのキャッシュについてNo.38154
fzok4234 さん 20/04/10 22:34
 
現在、マクロからバイナリキャッシュを作成してマクロの実行を高速化する機能は自
動起動マクロの場合に限定しておりますが、これを任意の.macファイルで手動で利用
できるようにすることは可能でしょうか。

マクロの使用に際して、ある機能のサブルーチンを複数の.macファイルから共有した
い時があり、そのサブルーチンだけを記述した.macファイルを呼び出し元の.macファ
イルからexecmacro文で呼び出すようなことをすると、動作が重くなってしまいます。
実際、当方の環境(Intel Core i7-8700K 3.7GHz 6コア12スレッド)でも空のマクロを
execmacroで2000回呼び出す場合の所要時間は約1秒です。while文でインクリメント
するだけの場合が1秒で約200万回だったことから見れば、execmacro文のオーバーヘ
ッドはかなり大きいです。

そこで、呼び出し先のサブルーチンの入った.macファイルをキャッシュ化すれば少し
は速くなるのはないかと期待しておりますが、任意の.macファイルのキャッシュ化が
できないため検証することが不可能です。


[ ]
RE:38154 マクロのキャッシュについてNo.38156
秀丸担当 さん 20/04/13 09:10
 

execmacroは確かにオーバーヘッドが大きいかもしれません。
いろいろ原因は考えられますが、おそらく複数の秀丸エディタをまたいでマクロ内容
や変数アクセス可能にしている構造そのものが大きそうです。
コンパイル内容の再利用も使えれば状況によっては有効だと思います。

対策の1つとして、setcompatiblemodeの値を追加して、setactivehidemaru等で別の
秀丸エディタに切り替え禁止とかいうモードがあれば、内部的な構造を1つの秀丸専
用にできるので、速くなるかも。

別の1つとして、また別のsetcompatiblemodeの値を追加して、メモリ上にコンパイ
ル内容を保持して.macのマクロファイルを2回目は参照しなくすれば速くなるかも。
あと、execmacro "test.mac.cache";と書くとキャッシュファイル自動生成と利用と
同じ効果ができるようになるとか。
ちなみに現状の自動起動マクロ用の.mac.cacheのキャッシュファイルは、コンパイル
内容が多ければ効果がありますが、.macと.mac.cacheの2つのファイルを参照して更
新が無いか調べたりしているので、内容が小さいと無駄に2つのファイルアクセスに
なり逆に遅くなる可能性があります。

あと単純に現状で無駄な処理があるので、何もしなくても改善できる点もありそうで
す。
そういったことを検討したいと思います。


[ ]