我使用Saxon Java库来合并两个文件。 XSLT文件位于here。
我发现即使有两个小的xml文件(每个约15个节点),当Saxon合并文件时,CPU使用率也会高峰。我也尝试将Saxon用于小型XML文件(~15个节点)的其他用例修改属性,我发现了相同的结果。
一般来说,XSLT处理CPU密集型任务吗?或者它是撒克逊人的已知行为?
答案 0 :(得分:3)
我认为Oliver Becker的合并样式表具有O(n ^ 2)性能,也就是说,如果您将输入的大小加倍,则需要四倍的时间。这不是XSLT的一般属性,它是Oliver正在使用的算法的属性。利用XSLT 2.0的深度相等()函数可以使代码更有效(尽管仍然是二次),但是比这更需要设计不同的算法:例如,预处理通过两个树计算每个节点的哈希码,以便后续测试两个树是否等效,这减少了两个哈希码的比较。
答案 1 :(得分:1)
IMHO XSLT非常占用CPU,但对于一个小文件,它仍然应该是简短的。
我建议你写一个简单的基准来看看转换一个小文件需要多长时间。通过至少10,000x的转换确保您的JVM已经预热,并测试在预热后至少2秒重复完成所需的时间。