Эффективный памятью процессор XSLT

Просто, вы сделали [1] вместо [i] в цикле печати. ​​

      for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
            printf("%02x", output[1]);

должно быть

      for(int i = 0; i < SHA256_DIGEST_LENGTH; i++)
            printf("%02x", output[i]);

Глупый латинский алфавит!

5
задан Justin R. 23 October 2008 в 19:19
поделиться

8 ответов

Я нашел хорошее решение: C++ Apache Xalan. Это обеспечивает сменного диспетчера памяти, позволяя мне настроить выделение на основе входа и преобразовать.

В нескольких случаях это использует памяти на ~60% меньше (я смотрю на частные байты), чем другие, я попробовал.

5
ответ дан 18 December 2019 в 14:53
поделиться

Можно хотеть изучить STX для основанных на потоковой передаче подобных XSLT преобразований. С другой стороны, я полагаю, что StAX может интегрироваться с XSLT приятно через интерфейс Transformer.

3
ответ дан 18 December 2019 в 14:53
поделиться

Это кажется, что Вы отсортированы - но часто, другой потенциальный подход должен разделить данные сначала. Очевидно, это только работает с некоторыми преобразованиями (т.е. где различные блоки данных можно рассматривать в изоляции от целого) - но затем можно использовать простой синтаксический анализатор (а не DOM), чтобы сделать разделение на управляемые части, затем обработать каждый блок отдельно и повторно собраться.

Так как я - совет директоров.NET, вещи как XmlReader может сделать разделение на блоки без DOM; я уверен, что существуют эквиваленты для каждого языка.

Снова - только для полноты.

[вопрос о ре редактирования] я не знаю ни о каком собственном имени; возможно, Разделите и Завоюйте. Для примера; если Ваши данные являются на самом деле плоским списком подобных объектов, то Вы могли просто разделить детей первого уровня - т.е. вместо того, чтобы иметь 2M строки, Вы разделяете их на 10 партий 200K строк или 100 партий 20K строк. Я сделал это перед большим количеством времен для работы с объемными данными (например, загрузка в блоках данных [все допустимые] и повторная сборка в сервере так, чтобы каждая отдельная загрузка была достаточно маленькой, чтобы быть устойчивой).

2
ответ дан 18 December 2019 в 14:53
поделиться

Я нашел, что инструмент пользователя создал для выполнения XSLT, использование более ранних версий MSXML делает его очень быстро, но также и использует невероятные объемы памяти и на самом деле не завершится, если это является слишком большим. Вы также терпите неудачу на некоторых, усовершенствовал функциональность XSLT, поскольку более ранние версии MSXML не поддерживают полный материал xpath.

Это стоит попытки, если Ваши другие опции занимают слишком много времени.

1
ответ дан 18 December 2019 в 14:53
поделиться

Если это имеет значение я подозреваю, что для Java, сакс так хорош, как это добирается, если необходимо использовать XSLT. Это довольно эффективно (и CPU и память) для больших документов, но сам XSLT по существу вынуждает полное дерево в оперативной памяти содержания быть созданным и сохраненным, за исключением ограниченных случаев. Саксонский SA (версия для сбора), предположительно, имеет расширения, чтобы позволить использовать в своих интересах такие случаи "потоковой передачи", так, чтобы могло бы стоить проверить.

Но совет разделить содержание является лучшим: если Вы имеете дело с независимыми записями, просто разделите вход с помощью других методов (как, используйте Stax!:-))

2
ответ дан 18 December 2019 в 14:53
поделиться

Это - интересный вопрос. XSLT мог потенциально быть оптимизирован для пространства, но я ожидаю все кроме самых неясных реализаций вокруг запуска путем парсинга исходного документа в DOM, который обязан использовать минимум несколько из размера документа в памяти.

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

У меня нет ответа, все же.

1
ответ дан 18 December 2019 в 14:53
поделиться

Смотрите на Xselerator

-2
ответ дан 18 December 2019 в 14:53
поделиться

Вы используете версию Java сакса или порт .NET? Можно присвоить больше памяти Java VM рабочий сакс, если у Вас заканчивается память (использующий-Xms параметр командной строки).

Я также нашел, что версия .NET сакса исчерпывает память менее легко, чем версия Java.

0
ответ дан 18 December 2019 в 14:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: