run文でのPerlプログラム実行が遅くなったNo.05354
midville さん 10/03/13 01:46
 
 run文で、あるPerlプログラムをフィルタとして実行しています。その実行
時間が、Ver.8_B28以降、異常に長くなりました。以下のようなコードで、
あるテキストファイルの場合の時間を測定したところ次のようになります。

 Ver.8_B27まで:常に1500〜2500ミリ秒ぐらい、つまり2秒前後。
 B28以降:長いときは94秒前後、短いときでも14秒前後。
 ただし、出力内容は同じです。
 環境は Windows XP SP3、秀丸V8.00 Beta45 です。

 B28の改版履歴の所に「プログラム実行で標準出力の待機中にCPU使用率が
上がる対策。」というのがありますが、これと関係があるのかな、などと
推測していますが、よくわかりません。

$PERL_PRG = "〜〜〜.pl";
#Time1 = tickcount;
disabledraw;
selectall;
run "perl " + $PERL_PRG + " < con > con";
title "時間:" + str(tickcount - #Time1) + " ミリ秒";
title -1;
endmacro;


 B27以前と以降での時間の差を確認するだけなら、Perlプログラムは
以下のもので十分です。
while ( <STDIN> ) {
    print;
}

[ ]
RE:05354 run文でのPerlプログラム実行がNo.05358
秀丸担当 さん 10/03/15 10:27
 

> run文で、あるPerlプログラムをフィルタとして実行しています。その実行
>時間が、Ver.8_B28以降、異常に長くなりました。以下のようなコードで、
>あるテキストファイルの場合の時間を測定したところ次のようになります。

報告ありがとうございます。
言われている通りの手順で確認することができました。
ご推察の通り、β28での修正が影響していました。
見直してみて、出力のされ方によって遅くなる場合があることがわかり、修正さ
せていただきます。
ただ、標準入出力は調べた限りではCPUを食わずに待機することはできないようで、
CPUを使ってチェックするしかないようです。
どちらをとるかというトレードオフのようなことで、以前のようにCPUをフルに使
うとすぐできますが、CPUを100%使わないようにするとなるとβ27と全く同じ速さ
にすることは難しいかもしれないです。
いずれにしても現状はかなり遅くなるケースがあるため、β27以前に近いレベル
までにできるように修正させていただきます。

[ ]
RE:05358 run文でのPerlプログラム実行がNo.05371
midville さん 10/03/15 21:01
 
>ただ、標準入出力は調べた限りではCPUを食わずに待機することはできないようで、
>CPUを使ってチェックするしかないようです。
>どちらをとるかというトレードオフのようなことで、以前のようにCPUをフルに使
>うとすぐできますが、CPUを100%使わないようにするとなるとβ27と全く同じ速さ
>にすることは難しいかもしれないです。

 了解しました。

>いずれにしても現状はかなり遅くなるケースがあるため、β27以前に近いレベル
>までにできるように修正させていただきます。

 よろしくお願いします。

[ ]
RE:05371 run文でのPerlプログラム実行がNo.05467
midville さん 10/03/26 09:35
 
 報告のrun文で標準入出力を使うPerlプログラムを実行する件、β46及び47
で確認しました。
 β27までと同じように、確実に2秒前後で終わるようになっています。
 使用頻度の高いプログラムなので助かります。ありがとうございました。
 確認報告が遅くなりましたこと、お詫び申し上げます。

[ ]