【问题标题】:XML Parsing performance DOM vs XOMXML 解析性能 DOM 与 XOM
【发布时间】:2013-06-17 01:40:56
【问题描述】:

我使用不同的解析器 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. 为什么解析器 Y 的运行时间与解析器 X 相同,但 CPU 时间却低得多,尽管这种测量是平均值而不是一次运行的结果。

  5. 是否可以让 Parser Y 的运行时间更短,从而在现实生活中体现 CPU 时间性能的差异。

【问题讨论】:

  • 您是否想要获得最佳性能?那么它可能不是 dom 或 xom,它是 vtd-xml

标签: xml performance parsing dom xom


【解决方案1】:

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

这里有几个:

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

【讨论】:

  • 感谢 Ira 的宝贵意见 :)
【解决方案2】:

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

【讨论】:

  • 您关于在您提供的两个选项中最快的结论可能是正确的,但对于打算阅读数百万份文档的人来说,这似乎不是一个好的选择。根据我在“XON.nu”上看到的内容(如果这确实是您正在使用的 XOM),我怀疑它能否触及自定义 XML 阅读器的性能。你检查过 XMLBooster 的“基准”数字吗?
猜你喜欢
  • 1970-01-01
  • 2022-11-04
  • 2010-12-25
  • 1970-01-01
  • 2012-02-26
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多