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

Използвам docx4j 2.8.1, за да заменя текстове и лого в рамките на word файловете. Сега искам да подобря производителността, тъй като обработката на около 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 Context init забавяне само веднъж)?   -  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 пъти по-бързо).

Всички допълнителни подобрения на производителността ще дойдат най-лесно чрез предоставяне на повече ресурси (повече ядра, ако искате да го правите едновременно) и повече RAM.

Кажи ми какво мислиш.

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