Максимальный размер при анализе XML с помощью DOM

В настоящее время я реализую клиент REST, который будет анализировать сообщения ответа XML. Предполагается, что он будет запущен на Android-устройстве. Таким образом, скорость памяти и скорость обработки – довольно большая проблема. Однако за один раз будет только один ответ XML, поэтому обработка или хранение нескольких XML-документов одновременно не является проблемой.

Как я понял, есть три способа анализа XML с Android SDK:

  • SAX
  • XmlPullParser
  • DOM

Читая об этих различных методах разбора, я получил, что SAX рекомендуется для больших XML-файлов, поскольку он не будет содержать полное дерево в памяти, например DOM.

Тем не менее, я спрашиваю себя, что такое большие килобайты, мегабайты, …? Есть ли практический размер, до которого не имеет значения, используется ли SAX или DOM?

Благодаря,
Роберт

Solutions Collecting From Web of "Максимальный размер при анализе XML с помощью DOM"

Стандартных ограничений для документов XML и DOM не существует, поэтому он полностью зависит от того, с чем может справиться хост-машина.

По мере внедрения на Android вы должны принять довольно ограниченный объем памяти и помнить DOM, парсер XML, вашу логику программы, логику отображения, сам JVM и Android, все должны вписаться в доступную память !.

Как правило, вы можете ожидать, что память DOM занимает около четырех раз больше исходного XML-документа. Так что предположим, что 512 МБ доступной памяти, постарайтесь взять не более половины этого для вас DOM, и вы получите 512/8 или практический максимум 64 МБ для XML-документа.

Чтобы быть в безопасности, я бы вдвое меньше, чем 32 МБ макс. Поэтому, если вы ожидаете многих документов такого размера, я бы использовал swithc для анализа SAX !.

Если вы хотите, чтобы приложение отвечало с любой скоростью на больших документах, SAX – это путь. Анализатор SAX может начинать возвращать результаты, как только первый элемент считывается, DOM-парсеру необходимо прочитать весь документ, прежде чем какой-либо вывод может быть отправлен в вашу программу.

Выдержка из этой статьи :

Парсер DOM страдает от раздувания памяти. С меньшими наборами XML это не такая проблема, но по мере роста размера XML парсы DOM становятся все менее эффективными, делая их не очень масштабируемыми с точки зрения роста вашего XML. Push parsers – это счастливая среда, поскольку они позволяют вам контролировать разбор, тем самым устраняя любое сложное управление состоянием, поскольку состояние всегда известно, и они не страдают от раздувания памяти DOM-парсеров.

Это может быть причиной SAX рекомендуется для DOM: SAX функционирует как синтаксический анализатор XML. Кроме того, ознакомьтесь со статьей Википедии для SAX здесь .

EDIT: Чтобы конкретно определить размер, вам нужно будет взглянуть на вашу реализацию. Здесь приведен пример размера объекта DOM Document в памяти Java-анализатора на основе Java. Java, как и многие языки, определяет некоторые ограничения на основе памяти, такие как размер кучи JVM , а также веб-службы Android / XML DOM API также могут определять некоторые внутренние ограничения по усмотрению программистов (упомянутые здесь частично). Нет однозначного ответа относительно максимально допустимого размера.

Мой опыт позволяет мне сказать, что с использованием DOM используемая память составляет 2x размер файла, но, конечно, это всего лишь показатель. Если в дереве XML есть только одно поле, содержащее все данные, используемая память похожа на размер файла!