2016-11-09 79 views
0

我正在读取一个50 GB的文件(只读)使用多个线程,每个线程从文件中读取一个连续的段。我试图使用FileChannel 为什么FileChannel比MemoryMappedBuffer表现更好?

  • 使用从FileChannel
  • 获得MemoryMappedBuffer我期待MemoryMappedBuffer跑赢FileChannel但FileChannel执行约30%更好始终两种方法

    • 我正在寻找解释。 我是一次一GB的内存映射,一旦我用完,我映射另一个1 GB。

      我的环境:Windows 7平台的64位Xeon 2.7 GHz的双处理器

    +0

    Windows 7平台64位至强2.7 GHz 2处理器 – Sid

    +0

    你有多少RAM?如果你没有超过50GB,FileChannel应该比使用虚拟内存更快。 – ebyrob

    +0

    阅读整个50个演出文件的目的是什么?你不能一部分处理它,以便它能适合你的公羊吗? – walkeros

    回答

    2

    两个变化都做同样的磁盘I/O。两者都将从磁盘读取内存中的页面。内存映射有一些页面错误开销。那么为什么你认为它会更快,假设有足够的物理内存可读?

    +0

    准确地说,内存缓冲区只是更多的开销(如果开销相对较小)。 – ebyrob

    +0

    同意但为什么MemoryMappedBuffer会变慢? – Sid

    +0

    我想说的是,页面错误开销似乎有点大概是30%左右 – Sid