Оптимизация производительности docx4j

Я использую docx4j 2.8.1 для замены текстов и логотипа в текстовых файлах. Теперь я хочу улучшить производительность, так как обработка около 50 документов происходит довольно медленно. Какие параметры рекомендуются для повышения производительности docx4j?

Код для замены строк (не логотипа) выглядит так:

 String xml = XmlUtils.marshaltoString(documentPart.getJaxbElement(), true);
 HashMap<String, String> mappings = buildReplaceMap(userData);

 Object obj = XmlUtils.unmarshallFromTemplate(xml, mappings);
 documentPart.setJaxbElement(obj);

person bertolami    schedule 27.03.2013    source источник
comment
Я предполагаю, что вы обрабатываете 50 документов через один экземпляр JVM (поэтому вы только один раз подвергаетесь задержке инициализации контекста JAXB)?   -  person JasonPlutext    schedule 28.03.2013
comment
да. Я заметил, что если документы генерируются одновременно, каждый в своем потоке, процедура занимает даже больше времени, чем если бы документы генерировались один за другим.   -  person bertolami    schedule 28.03.2013


Ответы (1)


Пожалуйста, попробуйте http://www.docx4java.org/docx4j/docx4j-nightly-20130328.jar

Он содержит экспериментальный метод variableReplace. Предполагая, что documentPart и сопоставления в соответствии с вашим вопросом, вы можете позвонить:

documentPart.variableReplace(mappings);

Вам не нужен documentPart.setJaxbElement.

В моем тестировании с 175-страничным документом обработка заняла 1/3 секунды (примерно в 3 раза быстрее).

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

Дайте мне знать, что вы думаете.

person JasonPlutext    schedule 28.03.2013
comment
Решил отредактировать xmls в zip-файле самостоятельно, без разбора xml и т. д., просто заменив обычный текст. Это работает из-за ограниченной сложности варианта использования. Однако он может быть хрупким. Но это действительно быстро. - person bertolami; 28.03.2013
comment
Соответствующий код находится в docx4j 3.0, поэтому, пожалуйста, используйте его вместо текущей (но уже старой) ночной сборки. - person JasonPlutext; 31.01.2014