grep 置換が grep 検索と比較して著しく遅No.40697
u-hori さん 23/07/07 11:07
 
[環境]
Windows 10 Pro 22H2
秀丸エディタ 9.23 64bit 版

[相談内容]
grep 置換の速度が grep 検索と比較して著しく遅い。

まず比較のため、SSDドライブ上の約18000個のファイルに対して以下の設定で grep
検索を実行します。
この検索は約6秒で完了し、ヒット件数は0でした。

・検索する文字列: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAA
・検索するファイル: *.c;*.cpp;*.h;*.hpp;*.pas;*.dpr;*.dproj;*.cs;*.xml;(略)
・大文字/小文字の区別: OFF
・単語の検索: OFF
・正規表現: OFF
・あいまい検索: OFF
・追加の条件: OFF
・サブフォルダーも検索: ON
・エンコードの種類: 自動判定

次に同様の設定で grep 置換を実行します。
置換後文字列は検索文字列と同じにしました。
grep 置換は約32分で完了し、置換件数は 0 です。grep 検索の約320倍の時間がかか
りました。

検索対象ファイルは大量ですが、そのうち実際に置換されるファイルは少数という使
い方が多いので、この grep 置換の遅さに困っております。
設定の変更等で改善するのであれば、教えていただきたいです。
あるいはgrep検索でヒットしたファイルに対してのみgrep置換するような設定があれ
ば少なくとも私の利用法では改善するのかなと思います。

[ ]
RE:40697 grep 置換が grep 検索と比較しNo.40698
Iranoan さん 23/07/07 12:05
 
u-hori さんこんにちは Iranoan です
> [相談内容]
> grep 置換の速度が grep 検索と比較して著しく遅い。
速度を速くできるのか? の本題は、開発側におまかせするとして、投稿を読んで1つ
確認したほうが良さそうな点をお聞きします

> まず比較のため、SSDドライブ上の約18000個のファイルに対して以下の設定で gre
>p 検索を実行します。
これらのファイルを全て開いて「全保存終了」するのにどれぐらい時間がかかるでし
ょうか?
「grepして置換」は検索/置換後に「上書き保存」をするので、保存自体に時間がか
かる条件なら、時間がかかるのは実装方法によっては当然に結果になります
またバックアップ機能も使っていれば、更に時間がかかります

> この検索は約6秒で完了し、ヒット件数は0でした。
<snip>
> grep 置換は約32分で完了し、置換件数は 0 です。grep 検索の約320倍の時間がか
>かりました。
この結果を見ると、おそらく検索にヒットしたかどうか? 置換されたかどうか? に関
わりなく
> ・検索するファイル: *.c;*.cpp;*.h;*.hpp;*.pas;*.dpr;*.dproj;*.cs;*.xml;(略)
に該当する全てのファイルを保存しているのでしょうね

[ ]
RE:40698 grep 置換が grep 検索と比較しNo.40699
u-hori さん 23/07/07 12:22
 
Iranoanさん、こんにちは。u-horiです。

>> まず比較のため、SSDドライブ上の約18000個のファイルに対して以下の設定で gr
>ep 検索を実行します。
>これらのファイルを全て開いて「全保存終了」するのにどれぐらい時間がかかるで
>しょうか?

約18000個を秀丸エディタで同時に開くのは難しいと思うので
代わりに robocopy でのコピー時間を計測しました。

robocopy D:\Src D:\Dest /E *.c *.cpp *.h *.hpp *.pas *.dpr *.dproj *.cs *.xm
l 略

18108個、983 MBのファイルがコピーされ、コピーに要した時間は約40秒でした。

>またバックアップ機能も使っていれば、更に時間がかかります

バックアップ機能は使っておりません。

>> grep 置換は約32分で完了し、置換件数は 0 です。grep 検索の約320倍の時間が
>かかりました。
>この結果を見ると、おそらく検索にヒットしたかどうか? 置換されたかどうか? に
>関わりなく
>> ・検索するファイル: *.c *.cpp *.h *.hpp *.pas *.dpr *.dproj *.cs *.xml (略)
>に該当する全てのファイルを保存しているのでしょうね

grep 置換を実行中の間、
タスクマネージャの詳細タブでの Hidemaru.exe プロセスの「IO 書き込みバイト
数」は変化しないので
ファイル書き込み処理は行われていないのではと考えます。す。

[ ]
RE:40699 grep 置換が grep 検索と比較しNo.40700
秀丸担当 さん 23/07/07 14:00
 
grepして置換は、確かにgrep検索と比べて非常に時間がかかる作りになっています。
grep検索のほうは、同じような処理をするのに幾つも方式があって、[その他]→[動
作環境]→[検索]→[grepの動作]→[文字数制限の設定...]にあるように、たくさんあ
ります。
grepして置換は幾つも方式は無くて、安全で厳しいほうを取っています。
実行時の確認[はい(1)][はい(2)]も省略はできないです。
例えばgrep検索のほうで、[追加の条件]をONにして、普通の文字のみにすると、だい
たい同じような時間になると思います。

とはいえ今回の例のような差はさすがに時間がかかりすぎだと思うので、ご提案のよ
うに、ヒットする対象を絞ってから、それに対して置換&保存ができたらいいです。
多くのファイルのうち対象が少ないようなケースだとかなり効果的で、かつ安全だと
思います。

grep検索のほうは[検索するファイル(N)]のドロップダウンに[(開いているファイル
全て)]があって、対象ファイル一覧を絞ってからそれに対して実行する仕組みがある
のですが、grep置換にはそれはありません。
その仕組み自体はあるので、それができないか今後のバージョンで試してみようと思
います。

[ ]
RE:40700 grep 置換が grep 検索と比較しNo.40702
u-hori さん 23/07/07 15:53
 
秀丸担当さん、こんにちは。u-horiです。

>とはいえ今回の例のような差はさすがに時間がかかりすぎだと思うので、ご提案の
>ように、ヒットする対象を絞ってから、それに対して置換&保存ができたらいいです。
>多くのファイルのうち対象が少ないようなケースだとかなり効果的で、かつ安全だ
>と思います。
>
>grep検索のほうは[検索するファイル(N)]のドロップダウンに[(開いているファイル
>全て)]があって、対象ファイル一覧を絞ってからそれに対して実行する仕組みがあ
>るのですが、grep置換にはそれはありません。
>その仕組み自体はあるので、それができないか今後のバージョンで試してみようと
>思います。

検討ありがとうございます。
そのような機能があると、かなり作業効率がかなりアップしますので、実装されるの
を楽しみに待っております。

補足になりますが、置換対象ファイルは数個で済む場合もあれば数百個になる場合も
ございます。

[ ]