2

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

                        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 时间性能的差异反映在现实生活中。

4

2 回答 2

2

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

这里有几个:

我没有使用这些工具的具体经验。(我确实出于内部目的写了其中之一)。

于 2013-06-20T09:28:12.040 回答
1

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

于 2013-06-20T10:19:49.650 回答