2016-09-12 11 views
5

私は、多くのファイル(最大5mio。)の小さなファイル(9KB)を読みなければなりません。現在のところ、それらはすべて1つのディレクトリにあります。私はこれが二次的な時間かn^2のログnを見上げるのを恐れている、これは正しいのだろうか?これは重要ですか(参照は実際の読書よりも時間がかかりますか?)ファイルがOSによってキャッシュされるときの実行時間の漸近的な振る舞いに違いはありますか?1つのディレクトリから多数の小さなファイルを読み取るのに問題がありますか?

ファイルを読み込むためにC++ストリームを使用します。現時点では、Windows 7をNTFSで使用していますが、後でLinuxクラスタ上でプログラムを実行します(ファイルシステムが不明)。

+0

メモリマップドI/Oを使用します。私のテストに基づいて、これはあなたが作ることができる単一の最大のファイルI/Oパフォーマンスの改善です。 –

+0

1つのディレクトリの制限を変更できますか?いくつかの有益な情報がここにあります:http://stackoverflow.com/questions/8238860/maximum-number-of-files-folders-on-linux – VPfB

答えて

4

ファイルを列挙してファイル名を処理すると、OSはディスクキャッシュにディレクトリエントリを持つ可能性が非常に高いです。実用的な目的のために、ディスクキャッシュはO(1)である。

あなたは機械的なHDDです。 500万回のディスクシークがあり、それぞれのディスクシークは1/100秒です。それは50.000秒で、半日以上です。これはSSDのために叫ぶ仕事です。

関連する問題