2009-03-26 2 views
0

У меня возникла проблема с обработкой многих xml-файлов, размер которых превышает 70 МБ. Проверка и доступ к ним стоили много времени. Теперь мне интересно, могут ли следующие шаги повысить производительность моих приложений.Используйте GZIP для повышения XML-синтаксического анализа

Я могу сжать 70-мегабайтный XML-файл в gzip-файле < 1MB. Так что я мог бы хранить только файлы gzip. Работа с данными может быть сделано так:

  • Сделать GZIP доступный с java.io.File (только маленький файл)
  • Используя, например, StringBufferInputStream и GZIPInputStream для извлечения conten в ОЗУ
  • работы с контентом (RAM): Parse, Validate, ...
  • создать строку в памяти, который представляет новый XML-контент (RAM)
  • Использование GZIPOutputStream для доступа к файловой системе (небольшое содержание снова)

Могу ли я это сделать или я вижу недоразумение в своих мыслях?

THX заранее! Hans

ответ

1

Чтение 70 МБ от HD должно занимать не более 1-2 секунд (в зависимости от вашего оборудования, конечно), поэтому, если у вас есть задержка больше, скажем, 4 секунды, узким местом является не ваш HD, а обработка XML и все, что вы с этим сделаете.

Прежде чем перейти к кодированию вашей идеи gzip (это звучит отлично), вы можете жестко скопировать образец XML в свой код (да, вставьте 70 МБ в виде одной строки), запустите приложение с красивой кнопкой, говорящей («сделайте это» ! ") - или дождитесь ввода пользователя, если вы находитесь в терминале, - и посмотрите, сколько занимает обработка XML.

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

После этого, если вы видите, что он обрабатывается достаточно быстро, проблема, очевидно, в HD. Если нет, попробуйте оптимизировать обработку XML.

+0

Хорошо, я должен поиграть с некоторыми сценариями, конечно, и я тоже проверю ваше. –

+0

Происхождение моей проблемы состоит в том, что есть много доступа к большим файлам. Например, при запуске приложения мой навигатор должен проверить (проверить) все файлы в папке, чтобы сделать правильное оформление значков или отчеты о недействительности. –

+0

Кроме того, я не могу хранить каждый проанализированный файл в памяти в качестве Java-объекта, потому что это могло бы разрушить ОЗУ. –

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