2012-03-28 4 views
0

Я использую саксонскую библиотеку Java для объединения двух файлов. Файл XSLT находится по адресу here.Высокое использование ЦП при использовании саксонской библиотеки

Я нахожу, что даже с двумя маленькими xml-файлами (~ 15 узлов каждый), использование процессора шипами, когда Saxon объединяет файлы. Я также попытался использовать Saxon для другого варианта использования case-модификации небольшого XML-файла (~ 15 узлов), и я нашел тот же результат.

В целом, XSLT обрабатывает задачу с интенсивным процессором? или это известное поведение саксонского?

ответ

3

Я думаю, что таблица стилей слияния Оливера Беккера имеет производительность O (n^2), то есть если вы удваиваете размер ввода, это занимает в четыре раза больше. Это не общее свойство XSLT, это свойство алгоритма, который использует Оливер. Возможно, код был бы намного более эффективным (хотя и все еще квадратичным), воспользовавшись функцией глубокого равенства() XSLT 2.0, но для более радикальной перестройки, чем это, потребуется дизайн другого алгоритма: например, pre -процесс проходит через оба дерева, которое вычисляет хэш-код для каждого узла, так что последующее тестирование того, эквивалентны ли два дерева, сводится к сравнению двух хэш-кодов.

1

IMHO XSLT очень интенсивен, но для небольшого файла он все равно должен быть кратким.

Предлагаю вам написать простой тест, чтобы узнать, сколько времени потребуется для преобразования небольшого файла. Удостоверьтесь, что ваша JVM разогрелась, выполнив перевод не менее 10 000x и проверив, сколько времени потребуется, когда вы делаете это повторно, по крайней мере 2 секунды ПОСЛЕ прогрева.

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