2013-06-20 3 views
2

Я написал тот же алгоритм синтаксического анализа XML в Java, используя различный парсер Parser X (XOM) и Parser Y (DOM). Я встроил код в цикл длиной 2 миллиона, чтобы имитировать количество операций, которые мне нужно переносить, и использовать профилировщик Java для мониторинга производительности. Измерения показаны ниже.XML Parsing performance DOM vs XOM

     Parser X (XOM)      Parser Y (DOM) 

Heap Memory    6.82         7.9 
Non-heap memory   14         15 
Garbage Collector  617 collections \ 2 sec    523 collections \ 1 sec 
Up time     1 m 53 s        1 m 54 s  
CPU time     1 m 2 s        44.8 s 

У меня есть несколько вопросов.

  1. Что делать, если я хочу обработать около 2 миллионов XML с размерами, достигающими 100 МБ ?. Какой из них лучше для лучшей производительности. Производительность измеряется по времени (тот, который заканчивает обработку всех XML быстрее, чем использование машины, поскольку у меня есть выделенный механизм для этого процесса). Короче говоря, какой из них лучше с точки зрения памяти VS процессорное время VS время безотказной работы

  2. Возможно ли использовать полную мощность процессора, чтобы закончить быстрее? Многопоточность?

  3. Если я хочу измерить производительность. Должен ли я использовать время процессора или время Up. Я знаю, что время процессора - это время, выделенное процессором для завершения процесса, а время ожидания - это общее время, затрачиваемое на наши часы машиной для завершения процесса?

  4. Почему Parser Y принимает такое же время, что и Parser X, но с гораздо меньшим процессорным временем, несмотря на то, что это измерение является не результатом одного прогона.

  5. Возможно ли сделать время Parser Y короче, поэтому разница в производительности процессора отражается в реальной жизни.

+0

Вы пытаетесь получить лучшую производительность? то это, вероятно, не dom, или xom, это vtd-xml –

ответ

1

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

+1

Ваш вывод о том, что является самым быстрым из двух предложенных вами вариантов, может быть правильным, но, похоже, это не такой хороший выбор для кого-то, кто намерен читать миллионы документов. Основываясь на том, что я вижу в «XON.nu» (если это действительно XOM, который вы используете), я сомневаюсь, что он может коснуться производительности пользовательских XML-считывателей. Вы проверили «контрольные» номера для XMLBooster? –

2

Если вы хотите быстро обрабатывать XML, вы должны использовать инструмент, который будет напрямую создавать пользовательский XML-ридер из вашей схемы. Они избегают общих накладных расходов DOM. Они также имеют тенденцию предоставлять ваше приложение API с прямым доступом к конкретному XML-контенту, включая данные, представленные естественным образом (например, float, а не текстовую строку для данных реального числа).

Вот некоторые из них:

У меня нет никакого определенного опыта работы с этими инструментами. (Я написал один из них для внутренних целей).

+0

Спасибо Ира за ваш ценный вклад :) – mowienay