マクロでの連続ファイルオープンについてNo.16028
瀬戸っぷ さん 03/12/08 12:26
 
どうもはじめまして。
秀丸エディタ、便利に使用させて頂いています。

マクロでの動作時に固まるコトがあるのでとりあえず報告に来ました。
一応、やっているコトは……
1)バッチを作成してカレントディレクトリ内の*.TXTのリストをリダイレクトで作成。
2)作成されたファイル(ファイルリスト)を秀丸で開き、リストの先頭からファイルを
順次開く。(開いたファイルの位置を記憶しておく)
3)開いたファイル内で特定文字列を検索し、そこに記述されているファイル名を文字
列変数に取り込み。
4)ファイルリストをアクティブに切り替えて3)で得たファイル名を検索。
5)見つからない場合はnewfileで新たに秀丸を開いて、エラーリポートを出力。
6)見つかった場合かエラーリポート出力後の時に3)で開いたファイルをアクティブに
して次のファイル指定を検索。
7)ファイル指定が見つからなかった場合はファイルリストをアクティブにしてファイ
ルを閉じる。
8)ファイルリストの次のファイルを開いて3)へ
9)ファイルリストの最後まで繰り返す。
というコトをやっています。

上記のマクロをWindows98SE・秀丸 Ver4.03上で動作させると、
[読み込み中...]でフリーズすることがあります。
(放置しておくと、「秀丸を起動しましたが2分たっても〜」のメッセージボックス
が表示されます)
15861の「閉じる処理」の設定も試してみましたが、効果無しです。
([動作環境]-[編集]-[高速化]のチェックボックスは全てOFF、メモリを使用して〜は
0です。)

[ ]
RE:16028 マクロでの連続ファイルオープンNo.16031
ENCODINGSHIFTJIS さん 03/12/08 14:05
 
SDIの面を高速度に切り替えるのはWindowsの鬼門です。
(たぶん)
特定文字列を【grep】して、ファイル名の行を抽出して
それと、Dirのリストを、突き合わせる(照合)するほうが
早いのでは。(特定文字列とファイル名が同一行なら)

[ ]
RE:16028 マクロでの連続ファイルオープンNo.16039
パブリッシャー担当 さん 03/12/08 17:01
 

 いつもお世話になっております。

 社長より再現テスト依頼を受けましたので同じような環境を整えまして再現テ
ストを行い検証したいと思います。

 ご不便おかけして申し訳有りませんがよろしくお願いします。

[ ]
RE:16028 マクロでの連続ファイルオープンNo.16058
パブリッシャー担当 さん 03/12/09 16:10
 

 いつもお世話になっております。

 ご報告頂いたマクロでの連続ファイルオープン時の不具合についきまして本日
再現することが出来ました。
 ご報告頂いたマクロ内容に近い動作をするマクロを作成して動作させることで
再現しました。

 今後の調査は社長が行いますので調査後何らかの報告があると思います。

 ご不便おかけして申し訳有りませんがよろしくお願いします。

[ ]
RE:16058 マクロでの連続ファイルオープンNo.16059
瀬戸っぷ さん 03/12/09 17:12
 
>  ご報告頂いたマクロでの連続ファイルオープン時の不具合についきまして本日
> 再現することが出来ました。
>  ご報告頂いたマクロ内容に近い動作をするマクロを作成して動作させることで
> 再現しました。

確認ありがとうございます。
仕事の関係でマクロでの処理が必須なので…(現在は3.19で凌いでいます)
OSの再インストールを3ヶ月前に行いましたが、他でも挙動が不安定なので当方の
みの問題なのか
心配していましたが……

>  今後の調査は社長が行いますので調査後何らかの報告があると思います。

よろしくお願いします。

[ ]
RE:16059 マクロでの連続ファイルオープンNo.16063
秀まるお2 さん 03/12/09 20:00
 
 setactivehidemaru時またはopenfile時にメモリリークを起こしているようで
す。

 メモリリークというか、正確にはハンドルのリークという感じでして…。それ
で、バックグラウンドで読み込む用のCreateThreadに失敗して固まっているよう
です。

 っとここまでは分かりましたが、メモリリークの箇所の特定がまだ全部分かっ
てません。もうしばらくお待ちください。

 (もしかすると、V3.xxからのずっと前からのバグだったのかもしれません)

[ ]
RE:16063 マクロでの連続ファイルオープンNo.16064
Iranoan さん 03/12/09 20:22
 
 秀まるおさん今日は、Iranoan です。
>  (もしかすると、V3.xxからのずっと前からのバグだったのかもしれません)
 自作のマクロでは、問題が起きにくくする方法が見つかったので、すっかり
報告を忘れていましたが、私も同様の問題が起きたことがあります。

>  setactivehidemaru時またはopenfile時にメモリリークを起こしているようで
> す。
 個人的には、後者の可能性が高いと思います。何故なら opnfile+
(setactivehidemaru をした後に) closehidemaru の代わりに、それ専用の
ウィンドウを予め開いておき setactivehidemaru の後に loadfile を組み合
わせると、「ウィンドウを閉じてください (詳細は忘れました)」といった
メッセージが表示されることなく、上手く動作するようになったためです。

[ ]
RE:16064 マクロでの連続ファイルオープンNo.16067
秀まるお2 さん 03/12/09 23:33
 
 ファイルマッピングのハンドルがどんどん増殖してるバグを見つけまして、そ
れは直しました。それで問題解決するかと思ったら、解決しませんでした。

 ファイルマッピングハンドルが増殖しても、単純にロックカウントが増えてる
だけみたいで、それでメモリ不足になるってことは無いようです。でも、これは
これで修正します。

> >  setactivehidemaru時またはopenfile時にメモリリークを起こしているようで
> > す。
>  個人的には、後者の可能性が高いと思います。

 たしかに、setactivehidemaruだけではバグは再現せず、openfileと
closehidemaruを永遠と繰り返した場合には再現するようです。

 Windows2000でタスクマネージャを見てた限りは、ハンドルも増えないし、メ
モリ使用量も増えないんですけど、なぜかWindows98だとダメみたいです。

 大変まずいバグだと思いつつも、解決策を見つけるのが非常に難しそうです。

 テストを続行して、また何か分かり次第連絡させていただきます。

■瀬戸っぷ様へ

 とりあえずは、Iranoanさんのように、openfileの代わりにloadfileするよう
な形にマクロを書き換えるか、いっそのことWindows2000かWindowsXPにアップグ
レードしていただくと、今回の問題は回避できるようです。

[ ]
RE:16064 マクロでの連続ファイルオープンNo.16068
Iranoan さん 03/12/09 23:39
 
 秀まるおさん今日は、Iranoan です。
 念の為お断りしておくと、開発者とは何の関わりも無い単なる一ユーザです。
> >  setactivehidemaru時またはopenfile時にメモリリークを起こしているようで
> > す。
 追加です。
 ひょっとすると、openfile だけでなく (メニューから行う場合も含めて)
(ダイレクト) タグジャンプでも同じ問題が起きている気もします。マクロで
tagjump を使った面のも同様だった気がするので...。

[ ]
RE:16067 マクロでの連続ファイルオープンNo.16069
encodingshiftjis さん 03/12/10 00:25
 
Windows98 は多数ファイルの操作でスピード低下する一般的現象が知られています。
大ソフトのインストールで多数のファイルを展開した直後はシステムが遅くなる。
多数のファイルを解凍したり、ネットワーク転送で受け取った直後も重くなります。
メモリーが少ないと影響がすぐわかります。
最良の対策はシステム再起動です。

[ ]
RE:16067 マクロでの連続ファイルオープンNo.16077
瀬戸っぷ さん 03/12/10 11:35
 
>  Windows2000でタスクマネージャを見てた限りは、ハンドルも増えないし、メ
> モリ使用量も増えないんですけど、なぜかWindows98だとダメみたいです。
>  大変まずいバグだと思いつつも、解決策を見つけるのが非常に難しそうです。

なんとなく、OSに起因するバグのようですね…

>  とりあえずは、Iranoanさんのように、openfileの代わりにloadfileするよう
> な形にマクロを書き換えるか、いっそのことWindows2000かWindowsXPにアップグ
> レードしていただくと、今回の問題は回避できるようです。

同じマシンにWindows2000が入っています。
が、もろもろの事情でWindows98の方を常用している状態でして……
100ファイル以上の大量の操作がある場合には、処理速度の関係もあるので
Windows2000側で処理していますが。(無論、そちらでは問題は出ていないです。)
Windows2000側がたまにしか使用しない為、他のソフトなどの環境設定が途中なので
移行しにくいという怠慢な理由もあったりしますが。
(あとはME-Officeの仕様の問題…)

仕事で使用しているマクロで、何ファイルかありますがloadfile使用に書き換えてみ
ます。
(軽くテストした限りではloadfile変更後は問題なく動作しました。)

[ ]
RE:16069 マクロでの連続ファイルオープンNo.16078
瀬戸っぷ さん 03/12/10 11:41
 
> Windows98 は多数ファイルの操作でスピード低下する一般的現象が知られています。
> 大ソフトのインストールで多数のファイルを展開した直後はシステムが遅くなる。
> 多数のファイルを解凍したり、ネットワーク転送で受け取った直後も重くなります。

エクスプローラ上で大体80ファイル以上のファイルを直接削除すると、
見事に固まってくれます。(数分後に動き出しますが、再起動した方がマシ)
OS自身の問題なのでしょう……
(かと言ってMeにするつもりはないですが。 Meにしたところで変わらない気もします
けど)

> メモリーが少ないと影響がすぐわかります。
> 最良の対策はシステム再起動です。

1日に3〜4回の再起動は当たり前状態になっています。
OSインストール3ヶ月でこんな状態ですから。
とりあえず、だましだまし使ってます。

[ ]
RE:16077 マクロでの連続ファイルオープンNo.16081
秀まるお2 さん 03/12/10 13:29
 
> 仕事で使用しているマクロで、何ファイルかありますがloadfile使用に書き換えてみ
> ます。
> (軽くテストした限りではloadfile変更後は問題なく動作しました。)

 大変助かります。

 ただし、テストはもちろん続行させていただきます。Windows側の問題と決ま
った訳でもないし。

[ ]
RE:16081 マクロでの連続ファイルオープンNo.16092
秀まるお2 さん 03/12/10 18:48
 
 いろいろ苦労してテストしましたが、結論としては、Windows98側の問題とい
うことで、対処不能という結論に達しました。

 単純に、「ダイアログボックスを出してすぐに終了する」という単純なプログ
ラムを作成し、そのプログラムの起動を繰り返す別のサンプルプログラムも作成
して、それを動作しっぱなしにしておくと、Windowsのメモリ使用量がどんどん
増えていき、最後にはメモリをすべて使い果たしてWindows全体が不安定になり
ます。システムモニタで確認したので間違いないです。

 ただし、秀丸からプロセス起動した場合は、その減るペースが速いようです。
これの原因はよく分かりません。

----------
 ちなみにこの辺のテストをいろいろしていて、いくつかメモリリークのバグを
見つけさせていただきました。それはそれで修正させていただきますが、そのバ
グが解消しても、やはり同じ程度の秀丸起動/終了回数でメモリがパンクするよ
うです。

------
 あとあと、[読み込み中...」の所で固まるのは、内部的なエラー発生時の後始
末処理が省略されてる(具体的にはCreateThreadに失敗してもエラーを無視して
動作してる)せいでして、それはそれで、将来の秀丸(V4.10以降)にて対応さ
せていただきます。

------
 もし必要でしたら、僕の作った、Windows側のメモリリークを検証するソフト
をソースコード付きで公開してもいいです。

[ ]
RE:16092 マクロでの連続ファイルオープンNo.16093
Iranoan さん 03/12/10 19:07
 
 秀まるおさん今日は、Iranoan です。
 調査ご苦労様でした。

>  いろいろ苦労してテストしましたが、結論としては、Windows98側の問題とい
> うことで、対処不能という結論に達しました。
 やっぱり OS に問題があったんですね。

[ ]
RE:16092 マクロでの連続ファイルオープンNo.16099
瀬戸っぷ さん 03/12/11 10:04
 
>  いろいろ苦労してテストしましたが、結論としては、Windows98側の問題とい
> うことで、対処不能という結論に達しました。

検証ありがとうございました。
OS側の問題ではどうにもならないですね。
とりあえず、loadfileで使っていきます。
(日に数回の再起動は毎度のコトですから、それに関しては問題ないです)

[ ]