私はこのような独立したブロックからなる適度に大きなバイナリファイルを有する:ブロック数、各ブロックのサイズとファイルの合計サイズが非常A変動高性能読み取り - リナックス/ pthreadの
header1 data1 header2 data2 header3 data3 ...
をロットですが、典型的な数値は〜1000ブロック、平均ブロックサイズは100kbです。ファイルは、私が制御できない外部アプリケーションによって生成されますが、できるだけ早くそれらを読みたいと思っています。多くの場合、ブロックのほんの一部(10%)にしか興味がありませんが、これは私が最適化する場合です。
私の現在の実装は次のようである:
- ファイルを開き、すべてのヘッダー読み取り - 次のヘッダの場所に(FSEEKするヘッダ内の情報を使用して)。開いているFILE *ポインタを保持します。
- データが要求されると、fseek()を使用してデータブロックを検索し、すべてのデータを読み取り、それを返します。
これはうまくいきますが、私はおそらく(?)考えていました。私は聞いたことがある。
どのような考えですか?
Joakim
ありがとうございます - 私はmmap + madviseと私が気づいていなかったreadaheadシステムコールを調べます。しかし、あなたは正しいです - おそらくパフォーマンスは十分です。 – user422005
まずは 'cat'トリックを試してみてください...あなたは驚かれるでしょう...しかし、本当にあなたはあまりにも心配していると思います... –