の詳細を読むことができ、私はmmap
が良い候補であると思います。私が言うことにはいくつかの理由があります: 1.実際にその部分が必要になるまで、実際にファイルをロードせずにWHOLEファイルを提供します。これは高速読み込みの利点ですが、最終的にすべてのバイトを処理した場合[またはファイルの4KBセクションごとに触れた場合]、大きな違いはありません。 2. mmap
は、ディスクからページにデータをコピーします。これは、私のテストでは、fread
またはread
をLinuxで使用するよりも効率的です(かなり大きな読み取りに対してfread
とread
の違いは無視しても差し支えありません)。FILE
C.しかし、私の経験では、かなりのオーバーヘッドがありました[これまで何度もさまざまな形で試してみました]
いつもと同じように、ベンチマークは常にインターネット上で尋ねています。あなたの状況では適切ではないと指摘されているように、コードが十分に良好であれば、コードのオーバーヘッドは、ディスクがデータを配信できるスピードに比べて桁外れです。たとえ並列(SSD ?)ディスクなど、最終的にディスク転送sボトルネックがどこになるのだろうか。その時点でできることは、可能な限りオーバーヘッドを最小限に抑え、ディスクにデータが配信されたらできるだけ早くアプリケーションにデータを取得することです。
「1秒あたりのバイト数」の良い基準は、ファイルを書き込むdd if=/dev/zero of=somefile bs=4K count=1M
を使用することです。その場合、ディスクからどれくらいの読みやすさを確認するには、dd if=somefile of=/dev/null bs=4K
にします。
どのようにファイルにアクセスしますか?あなたはそれを使用する前に、メモリ内のすべてのファイルを必要としますか?あなたは読み書きしますか、またはちょうど読みますか? –
最初の4つのオプションのベンチマークで始めるのはなぜですか?私はあなたが非常に簡単にそれを測定することができ、とにかくそれを行う必要があると思う:それはパフォーマンスになると、あなたは盲目的に何も測定せずに信用すべきではありません。 –
実際にmmapを使用するのが実際に遅いのですか?あなたのプロセスのメモリは、ファイルの内容と同じようにスワップアウトすることができます。また、mmapに対してMAP_POPULATEフラグを試して、マッピングのページを事前にフォールトすることもできます。 –