Perl readdirを使用してファイルのリストを取得していますが、ディレクトリに250,000を超えるファイルが含まれているため、readdirを実行するのに長時間(4分以上)がかかるため、80MB以上のRAMを使用します。これは5分ごとに定期的な仕事を予定していたため、この遅延時間は受け入れられません。250,000ファイルのディレクトリに対してPerlのreaddirをスピードアップするにはどうすればよいですか?
詳細情報: 別のジョブでは、スキャン中のディレクトリ(1日に1回)がいっぱいになります。 このPerlスクリプトは、ファイルの処理を行います。ファイル数はスクリプトの反復ごとに指定され、現在は実行ごとに1000回です。 Perlスクリプトは5分ごとに実行され、1000個までのファイルを処理します(該当する場合)。 Perlが複雑なワークフローを引き起こすデータをデータベースにプッシュする際に、ダウンストリーム処理を継続できるようにするためのファイル数の制限。
ディレクトリからファイル名を取得する別の方法があります。理想的にはこのスクリプトの速度を大幅に向上させる1000(変数で設定)に制限されていますか?
ブリリアント。私は戻っていくつかのディレクトリアクセスをリファクタリングする必要があるかもしれません! –
定義済みのものは暗黙的ですが、(my $ file = readdir $ dir){}はOKです –
これは私の問題を解決しました。また、希望のしきい値で停止できるように検索されたファイル名の数を厳密に制御することもできます。ありがとう、daotoad。 – Walinmichi