3

ファイルの読み取りとは、ハード ディスク上のすべてのドキュメント (doc、docx、xls、xml、txt など) を読み取ることを意味します。

私のファイルのほとんどは、約 10KB ~ 1MB になると思います。

ファイルを読み取り、特定の単語がある場合はテキストをフィルター処理します。

したがって、ファイルの読み取りにスレッドプールと1つのスレッド、およびフィルタリングを行う他のスレッドが必要だと思います。

MMFCreateFile/ReadFileまたは各ファイルを読み取るための I/O 完了ポートがあると聞きました。

どの機能を使用すればよいですか?

4

3 に答える 3

4

私のテストでは、ファイルのメモリ マッピングがコンテンツをメモリにロードする最速の方法であり、わずかな差でした。

私が行ったテストは Linux で行われましたが、メモリ マップされた領域にファイルをロードする方法は、一度にページ内のデータを OS が所有するメモリにコピーするため [メモリ マップ ファイル バッキング メモリが所有され、処理されます。完全に OS によって行われるため、OS にはそのメモリを所定の位置に「ロック」する機能などがあります]。これは、ファイルの一部をカーネル バッファーに読み取ってから、そのコンテンツをアプリケーションが提供するバッファーにコピーするよりも高速です。ただし、大きなファイル (または多くの小さなファイル) の場合、主な制限要因は依然として「ハードディスクがデータを配信できる速度」です。私のシステムでは約 60MB/s です。システムが生成するものより遅くすることはできますが、速くすることはできません。

于 2013-05-08T10:10:48.307 に答える
1

純粋な IO 速度については、試してみることをお勧めしCreateFileMappingます MapViewOfFile。Windows でこれを測定したことはありませんが、Linux で同様の手法を使用すると、速度が大幅に向上する可能性があります。

于 2013-05-08T10:11:59.757 に答える
-1

I/O を読み取る「最速」の方法はありません。freadより速く、または同等のものを取得することはできません。いずれにせよ、ハード ドライブ I/O が主なボトルネックになるため、スレッドを使用しても役に立ちません。

ハードドライブ内のすべてのファイルを一括で読み取る場合、速度は最終的にハードドライブの速度に依存します。時間の 95% は I/O の待機に費やされる可能性が高いため、マルチスレッド化による速度の向上はせいぜい 5 ~ 6% ですが、プログラムの実行速度が 2 倍になることには変わりありません。

于 2013-05-08T10:04:01.897 に答える