大容量ファイルー現在の内容 grep実行時のNo.11124
inouen さん 06/09/16 11:52
 
大容量ファイル指定時に(現在の内容)でのgrepの動作に問題があるようですので
御検討をお願いします。

1.行の先頭のファイル名が不正文字コード:パターン 0xffとなることがある。

    80MB, 335MB, 800MB等のファイルでのgrep時に発生検出したことがあります。
    但し、200MB, 500MBの場合に正常にファイル名が出力されることもあります。

    下の例は335MB 英数字のみのファイルについて 
    折り返しは固定、折り返し文字数256文字、
    実ファイルは平均100文字/行、最大150文字/行程度、
    大文字/小文字の区別あり、単語の検索モード指定、単語 "Summary"指定での
    現在の内容でのgrep結果です。
   

(3002844): #---Summary-----------

    同じファイルをファイル名指定で同じ条件でgrepした場合は次の通り
    正しくファイル名が出力されます。

mnode_n50_s60000_f.log(3002844): #---Summary-----------


2.現在の内容でのgrep実行時間が他のケースよりも大きい

    同じく335MBのファイルでの実行時間が次の通りです。
    サーチ単語 Summaryはファイルの最後近くにあり、
    ファイルは全部メモリにキャッシュされた状態です。
    (Athlon64 2800, 2GB, WinXP)

    検索: 4秒弱
    ファイル指定のgrep:   25秒
    現在の内容指定のgrep: 47秒

    検索、ファイル指定のgrepでは CPU負荷100%の状態で実行されます。

    現在の内容指定grepの場合、最初25秒程、表示がエディット画面のまま変らず、
    CPU負荷40-50%でディスクアクセス他をしているようです。
    その後 "grepの処理中”の表示が出てCPU負荷100%の状態で約22秒実行し、
    ...Summay...と結果が表示されます。

    ファイル読み込み直後等、ファイル内容は全部主記憶にキャッシュされているの
で、
    ファイル指定のgrepの場合と同様な時間で、最初の25秒程の実ディスクアクセ
スは
  無しに現在の内容指定 のgrepも実行可能と考えられますので、ご検討お願いし
ます。

    さらには 条件が異なるので無理かも知れませんが、検索の場合と同じオーダーの
    時間で現在の内容指定grepが出来ないかも検討していただくことを希望いたしま
す。

    圧縮ファイルは30MB程度ですので必要であればお送りすることは出来ます。
    (もっと小さいファイルのケースも再度確認して送ることも出来ますが)

    以上 よろしくお願いします。


[ ]
RE:11124 大容量ファイルー現在の内容 greNo.11125
inouen さん 06/09/16 12:07
 
次の行の&#63731は貼り付け時に文字化けするようです。
元データは0xffの文字コードとなっています。
よろしくお願いします。

>(3002844): #---Summary-----------

[ ]
RE:11124 大容量ファイルー現在の内容 greNo.11127
秀丸担当 さん 06/09/18 13:14
 

>1.行の先頭のファイル名が不正文字コード:パターン 0xffとなることがある。

このようになるのは、おそらくgrepを実行する元の秀丸エディタが一時的に応答
無しになっているため、元の秀丸エディタのファイル名が取得できないためと思
われます。
取得に失敗しても自動的に再試行するように改善してみようと思います。
この問題はファイル内容は関係なく、ファイルの大きさやPCの環境に依存する
速度が関係してくることだと思うので、ファイルは送っていただかなくても大丈
夫です。

>2.現在の内容でのgrep実行時間が他のケースよりも大きい

現在の内容でgrepしたときは、内容を一時的にファイルに書き出してから、その
ファイルに対してgrepをしています。
そのため、確認された通りの時間の差が現れると思います。
言われている通り、改善の余地はあります。ネタとして参考にしたいと思います。
現時点では編集中の未保存の内容が無ければ、ファイル名を直接指定したほうが
高速になります。

[ ]