2015-03-25 4 views
1

Я использую RandomAccesFile и записываю данные в кусках по 10 МБ за раз. Следующий источник. Здесь он записывает 10 МБ данных при вызове записи. Это занимает ~ 700 мс. Есть ли способ улучшить это с помощью файлового канала или других средств. Файловая система - NFS.Работа с файлами ввода-вывода Java?

 RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw"); 
     OutputStream output = Channels.newOutputStream(randomAccessFile.getChannel()); 
      randomAccessFile.seek(offset); 

     output.write(data, 0, dataLength);//10MB 
     output.flush(); 
+1

Что вы действительно пытаетесь достичь? –

+4

10 МиВ менее чем за секунду разумно, честно; не забывайте, что вам нужно переходить через сеть, а сетевые накладные расходы не являются незначительными. Основным повышением производительности, которое вы можете получить здесь, является проверка и изменение при необходимости конфигурации вашего сервера/клиента NFS. – fge

+0

Вы можете сжать свои данные –

ответ

1

NFS является, by definition нелокальные так что вы в значительной степени ограничены пропускной способности Вашей сети - возможность писать 10MiB в 700 мс равно имеющий пропускную способность 14,28 МиБ/с - это было бы около 119 Мбит, поэтому я предполагаю, что вы действительно говорили о MB/s, и в этом случае у вас все еще было 114 Мбит .... ну, я предполагаю, что вы на Gigabit-LAN.

В этом случае у вас действительно будут проблемы с производительностью, поскольку gbit-LAN ​​может сделать гораздо больше. Есть несколько шагов, чтобы найти причину:

  • проверить, если другое приложение работает
  • проверить, если ваша сетевая карта имеет некоторые неисправные установки (сброс к заводским настройкам, если это возможно)
  • проверки, если другое приложение может передавать данные быстрее, чем это

и, наконец, (если проблема сохраняется):

Смежные вопросы