2016-11-09 15 views
0

Я читаю 50-гигабайтный файл (только чтение), используя несколько потоков с каждым потоком, читающим последовательный сегмент из файла. Я попробовал два подходаПочему FileChannel работает лучше, чем MemoryMappedBuffer?

  • Использование FileChannel
  • Используя MemoryMappedBuffer, полученный из FileChannel

Я ожидал MemoryMappedBuffer опережать FileChannel но FileChannel выполняет около 30% лучше последовательно.

Я ищу объяснения. Я - картография памяти в 1 Гб за раз, и как только я заканчиваю, я сопоставляю еще 1 Гб.

Моя среда: Windows 7 Платформа 64 бит Xeon 2,7 ГГц 2 процессора

+0

Windows 7 платформа 64 бит xeon 2,7 ГГц 2 процессора – Sid

+0

Сколько у вас RAM? Если вам не хватает более 50 гб, FileChannel должен быть быстрее (чем при использовании виртуальной памяти). – ebyrob

+0

Какова цель чтения всего файла с 50 играми? Не можете ли вы обработать его по частям, чтобы он мог поместиться в ваш баран? – walkeros

ответ

2

Обе вариации должны делать то же диск ввода/вывода. Оба будут кэшировать страницы в памяти, как считанные с диска. На карте памяти есть некоторые служебные данные об ошибках страниц. Итак, почему вы ожидаете, что он будет быстрее, предполагая, что в нем будет много физической памяти?

+0

Точнее, буфер памяти просто больше накладных расходов (если относительно небольшие накладные расходы). – ebyrob

+0

Согласен, но почему же MemoryMappedBuffer работает медленнее? – Sid

+0

Я предполагаю, что я говорю, что это немного похоже на накладные расходы на страницу, составляющие около 30%. – Sid