2013-03-27 129 views
0

我正在使用docx4j 2.8.1来替换word文件中的文本和徽标。现在我想提高性能,因为处理大约50个文档的速度很慢。建议哪些选项来提高docx4j的性能?优化docx4j性能

替换字符串(未标识)的代码如下所示:

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

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

我假设你正在通过单个JVM实例处理50个文档(所以你只会招致JAXB上下文初始化延迟一次)? – JasonPlutext 2013-03-28 01:25:50

+0

是的。我所观察到的是,如果文档是同时生成的,每个文档都在其自己的线程中生成,则过程的花费甚至比生成一个接一个的文档更长。 – bertolami 2013-03-28 06:23:56

回答

0

请尝试http://www.docx4java.org/docx4j/docx4j-nightly-20130328.jar

它包含一个实验variableReplace方法。假设documentPart和映射根据您的问题,您可以拨打:

documentPart.variableReplace(mappings); 

你不需要documentPart.setJaxbElement。

在我测试175页文档时,处理花了1/3秒(大约快了3倍)。

通过提供更多资源(如果要同时执行更多内核)和更多内存,任何进一步的性能改进都将最容易实现。

让我知道你在想什么。

+0

决定自己编辑压缩文件中的xml,而不用xml解析等,只是纯文本替换。这是因为用例的复杂性有限。但它可能是脆弱的。但速度非常快。 – bertolami 2013-03-28 12:31:32

+0

此链接已损坏。 – Math 2014-01-30 20:10:09

+0

相关代码位于docx4j 3.0中,因此请使用该代码而不是当前(但现在较旧)的每晚构建。 – JasonPlutext 2014-01-30 22:42:40