【速攻】マクロが遅い!画面描画を停止で速度UP ~ サクラエディタ

2023年8月19日土曜日

VBS サクラエディタ マクロ


はじめに

サクラエディタは無料で多彩な機能を備えているテキストエディタです。

処理する内容が多い場合、マクロで一気に処理するのは大変便利です。しかし、マクロ処理の内容が多くなると、時間が掛かることがあります。 マクロの実行時間が長くなってきたら、実行中の画面処理内容を停止してみましょう。

以下のような方に向けて書いております

  • サクラエディタのマクロ実行が遅いと感じる。
  • 実行結果を眺めていると、目がチカチカする。

サンプルコードと実行結果の比較

サンプルコードを用意しました。拡張子はVBS形式です。

SetDrawSwitch(0)    '画面描画 停止
InsertTime          '時刻挿入
char(13)            '改行

for i = 1 to 1000
InsText(CStr(i) + "行目")
char(13)        '改行
next

InsertTime          '時刻挿入
SetDrawSwitch(1)    '画面描画 開始
ReDraw

1000行文字入力の実行結果は以下のとおりです。

画面描画 非表示 → 一瞬
画面描画 表示 → 7秒ほど

ちょっとした処理のサンプルですが、7秒の差が出ました。

SetDrawSwitch関数は画面描画の表示・非表示設定

SetDrawSwitch関数は画面描画のON/OFFをする関数で、構文は以下のとおりです。 (サクラエディタ ヘルプ引用)

SetDrawSwitch関数

【構文】
function SetDrawSwitch( int1: Integer ) :Integer; [↑]

【引数】 int1 表示設定値   0: 非表示   1: 表示

【戻り値】
0: 設定する前は非表示に設定されていた   1: 設定する前は表示に設定されていた

【解説】
画面描画の表示・非表示を設定します。
戻り値で以前の値が取得できます。
マクロ・プラグインの実行が完了すると、自動的に実行する直前の値に再設定されます。

冒頭に『SetDrawSwitch(0)』を入れれば、大抵の場合大丈夫です。

画面更新を止めることで、マクロ処理速度と実行中の様子が表示されなくなり、実行が早くなります。目のチカチカも減ります。

途中で実行結果を確認したい場合、『SetDrawSwitch(1)』で画面更新を有効にしましょう。

処理結果が正常に表示されていない場合は、以下で紹介する『ReDraw』で画面更新を行ってください。

ReDraw関数で画面更新

画面を再描画する関数で、構文は以下の通りです。 (サクラエディタ ヘルプ引用)

ReDraw関数

【構文】
void S_ReDraw ( )

【機能】
再描画    
現在の編集ウィンドウを再描画します。
何らかの原因で画面表示を最新状態に更新したい場合に使います

サンプルの実行結果では、正しく画面更新がされておりませんでした。
『SetDrawSwitch』を使って画面更新を停止した場合は、『ReDraw』をしたほうが無難です。

まとめ

  • マクロの実行が遅い場合、画面更新を停止すると処理速度が上がる。
  • 処理中の画面を見たくない場合にも『SetDrawSwitch』関数が有効。
  • 画面更新を止めたときは、『ReDraw』を加えたほうが無難。
もしSetDrawSwitch関数を試したことがない方は、一度試してみることをお勧めいたします。

QooQ