この場合、何が良いのだろうと思っていましたか?Perl:複数のファイルを読むとパフォーマンスが低下する
何千ものファイルを読み込む必要があります。私は各ファイルを開いて1つを読んで閉じてしまうことを考えていました。または、すべてのファイルを1つのファイルに入れて読んでください。
提案?これはPerlですべてです。
この場合、何が良いのだろうと思っていましたか?Perl:複数のファイルを読むとパフォーマンスが低下する
何千ものファイルを読み込む必要があります。私は各ファイルを開いて1つを読んで閉じてしまうことを考えていました。または、すべてのファイルを1つのファイルに入れて読んでください。
提案?これはPerlですべてです。
それほど大きな違いはありません。これは早すぎる最適化のようなものです。
ファイルを順番に読みます。 Perlのファイル入出力機能は、OSのネイティブファイル入出力呼び出しを中心としたかなり薄いラッパーであるため、単純なファイル入出力のパフォーマンスについてはあまり意味がありません。
cat
すべてのファイルを1つの大きなファイルにまとめる時間が問題にならない場合は、より高速になります(デフォルトでファイルを順番に読み取る場合のみ)。
もちろん、プロセスを考慮すると、読んだり、書き込んだり読んだりする必要があるため、処理が非常に遅くなります。
一般に、1000Mの1つのファイルを読むことは、100個のファイルに対して100個のファイルを読むよりも速くなければなりません。なぜなら100個のファイルのためにメタデータを探す必要があるからです。
tchristによれば、パフォーマンスの違いは重要でない可能性があります。私はそれがファイルの種類(例えば、非常に小さいファイルの数が非常に多く、それがはるかに異なっている)と、システムとストレージの全体的なパフォーマンスに依存していると思います。
[プロファイリング](http://p3rl.org/Devel::NYTProf)は、プログラムがその行を処理する時間をほとんど費やしていることを明らかにするので、オープニング部分を最適化する価値はありません。 – daxim
最初の近似では、より多くのオペコードが実行されるほど、実行に時間がかかります。これは現実にはおおよその近似に過ぎませんが、それは誤っているよりも真実です。内側のインタプリタディスパッチループが支配的になります。 – tchrist
daxim:どうやってそれを知ることができますか?ゴードンはファイルで何が行われたのか説明しませんでした。彼は 'a \ nb \ nc \ n'のような1000sのファイルを持っていて、単に行を数えたいと思っています(合成例)。処理は、ファイルを実行しているディスクヘッドよりもはるかに高速であるため、多くの異なるファイルを読み取ると大きなオーバーヘッドが発生します。 @ Gordon:それが何か変わるかどうかをもっとよく伝えるために、私たちがもっと詳しく説明してください。 –