- 締切済み
ファイル操作について
例えば1つのディレクトリに10万個の画像があった場合に、同じディレクトリ内にperlで新しい画像を作ったり削除したりすると、処理速度が遅くなってしまいます。(作成や削除に時間がかかったりする) 違うディレクトリではスムーズに画像を作成したり、削除したりできるのですが、大量のファイルがあった場合は遅くなってしまうようです。 perlでファイルを作ったり削除するのに、ファイル数が多いからという理由で速度が遅くなるものでしょうか。 また、何か対策をご存知であれば教えていただけると嬉しく思います。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
ディレクトリの中から目的のファイルを探すための時間に、差が出る可能性は有ります。 ただ、単に「指定した名前のファイルを削除」とかだったら、極端に遅くなるとは考えられません。 何か、他の処理で時間がかかっているのでは? 例えば、「削除対象のファイルかどうかを、全部のファイルについて個々に調査している」とか
- _--_1l1_1_
- ベストアンサー率67% (102/152)
遅くなりませんよ。RAMDISKでファイルアクセスを実験したので参考程度ですが、 10万個のファイルのあるディレクトリで、perlで1万回ファイル作成と削除を繰り返しても0.2秒程度です。 $ cat hoge.sh mkdir -p /tmp/file_test cd /tmp/file_test touch test_{1..100000}.txt time perl -e 'for (1 .. 10000){open my $fh, ">", "hoge.txt"; print {$fh} "hoge"; close $fh; unlink "hoge.txt";}' $ bash hoge.sh real 0m0.202s user 0m0.068s sys 0m0.132s
お礼
調査していただきありがとうございます。 他に原因があるのかやってみましたが、やはり遅くなってしまいます。 再度最初からやってみたいと思います。 ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
確認ですが, 「perlで」遅いということでしょうか? いいかえると Perl 以外の言語で書いたプログラムでは遅くないんだけど Perl でプログラムを書いたときだけ遅い ということでしょうか?
補足
perl以外の言語は使った事がありませんが、linuxのコマンド等で削除したり操作する際は特に遅く感じません。 なので原因がよく分からないのですが…
補足
ありがとうございます。 >例えば、「削除対象のファイルかどうかを、全部のファイルについて個々に調査している」とか こちらは全部のファイルから対象のファイルがあるかどうかの存在確認をしてといった意味でしょうか? もしそうでしたら、そういう風な使い方はしております。 このような場合は速度が落ちてしまうものなのでしょうか。