2013-06-20 42 views
2

我用Java使用不同的解析器解析器X(XOM)和解析器Y(DOM)编写了相同的XML解析算法。我将代码嵌入到200万次循环中以模拟我需要执行的操作数量,并使用Java Profiler监视性能。测量如下所示。XML解析性能DOM与XOM

     Parser X (XOM)      Parser Y (DOM) 

Heap Memory    6.82         7.9 
Non-heap memory   14         15 
Garbage Collector  617 collections \ 2 sec    523 collections \ 1 sec 
Up time     1 m 53 s        1 m 54 s  
CPU time     1 m 2 s        44.8 s 

我有几个问题。

  1. 如果我想处理大约200万个大小达到100 MB的XML,该怎么办?哪一个更好,以获得更好的性能。性能是以时间来衡量的(无论机器利用率如何,我都有更快的处理所有XML的机器,因为我有专门的机器来处理这个过程)。简而言之,内存VS CPU时间VS正常运行时间更长

  2. 利用完整的CPU电源可以更快完成吗?多线程?

  3. 如果我想测量性能。我应该使用CPU时间还是使用时间。我知道CPU时间是CPU专用于完成该过程的时间,而上升时间是机器完成该过程所花费的总时间?

  4. 为什么Parser Y与Parser X的时间相同,但CPU时间要低得多,尽管事实上这个测量并不是单次运行的结果。

  5. 是否可以使Parser Y的运行时间缩短,以便CPU时间性能的差异反映在现实生活中。

+0

您是否试图获得最佳性能?那么它可能不是dom,或者是xom,它是vtd-xml –

回答

1

在扩展了两种算法的代码以涵盖各种操作之后,事实证明,XOM解析器在相同的CPU时间和较低的内存占用情况下,运行时间快得多。 XOM解析器为我赢得胜利。

+1

你提供的两个选择中最快的结论可能是正确的,但它似乎不是一个好的选择对于有意读取数百万文件的人。根据我在“XON.nu”中看到的内容(如果这确实是您使用的XOM),我怀疑它可能会影响定制XML读取器的性能。您是否检查过XMLBooster的“基准”数字? –

2

如果您想要快速处理XML,您应该使用一种工具,它将直接从您的模式生成一个自定义XML读取器。这些避免了DOM的一般开销。他们还倾向于为您的应用程序提供对特定XML内容的直接访问API,包括以自然方式表示的数据(例如,实数数据的浮点数而不是文本字符串)。

这里有几个:

我对这些工具没有具体的经验。 (为了内部目的,我写了其中一个)。

+0

谢谢你Ira的宝贵意见:) – mowienay