2016-11-09 14 views
0

私は、複数のスレッドを使って50 GBのファイル(読み込み専用)を読んでいます。各スレッドはファイルから順次セグメントを読み込みます。私はのFileChannelをアウトパフォームするMemoryMappedBufferを期待していたが、のFileChannelは、一貫して約30%向上実行のFileChannel なぜFileChannelはMemoryMappedBufferよりも優れたパフォーマンスを示しますか?

から得MemoryMappedBufferを用いてのFileChannel

  • を使用して、2つのアプローチ
    • を試みました。

      私は説明を探しています。 私は一度に1ギガバイトのメモリマッピングをしています。

      私の環境:Windows 7のプラットフォーム64ビットXeonプロセッサ2.7 GHzの2つのプロセッサ

  • +0

    Windows 7プラットフォーム64ビットxeon 2.7 GHz 2プロセッサ – Sid

    +0

    どれくらいのRAMがありますか?あなたが50GB以上でなければ、FileChannelは(仮想メモリを使用するよりも)速くなければなりません。 – ebyrob

    +0

    50ギグファイル全体を読む目的は何ですか?それはあなたのラムに合うように、部分ごとにそれを処理することはできませんか? – walkeros

    答えて

    2

    どちらの変動は、同じディスクI/Oを行う必要があります。両方とも、ディスクの読み取りとしてメモリ内のページをキャッシュします。メモリマッピングには、いくつかのページフォルトオーバーヘッドがあります。それで、なぜ物理メモリを読み込めると仮定すれば、高速化が期待されますか?

    +0

    正確には、メモリバッファはちょっとだけオーバーヘッドです(オーバーヘッドが比較的小さい場合)。 – ebyrob

    +0

    合意されていますが、なぜMemoryMappedBufferが遅いのですか? – Sid

    +0

    私は、ページフォールトオーバーヘッドが約30%になるように思えると思っています。 – Sid

    関連する問題