【发布时间】:2011-02-01 00:47:33
【问题描述】:
我已经使用 DOM 很长时间了,因此 DOM 解析性能非常好。即使在处理大约 4-7 MB 的 XML 时,解析速度也很快。我们使用 DOM 面临的问题是内存占用,一旦我们开始处理大型 XML,就会变得巨大。
最近我尝试转移到 Stax(XML 的流解析器),它被认为是第二代解析器的顶级(阅读有关 Stax 的文章,它说它现在是最快的解析器)。当我为大型 XML 尝试使用 Stax 解析器时,大约 4MB 的内存占用肯定大大减少了,但是解析整个 XML 并从中创建 java 对象的时间几乎比 DOM 增加了 5 倍。
我使用了 Stax 的 sjsxp.jar 实现。
我可以从逻辑上推断出,由于解析器的流特性,性能可能不是非常好,但减少了 5 时间(例如,DOM 需要大约 8 秒来为这个 XML 构建对象,而 Stax 解析大约需要 40平均秒数)绝对是不可接受的。
我是否完全错过了一些要点,因为我无法接受这些性能数据
【问题讨论】:
-
你能提供更多细节吗?您使用什么算法来使用带有 DOM 的 XML 以及使用什么算法来使用 StAX 事件?根据我的经验,编写使用 StAX 事件的代码比较困难,但性能始终优于 DOM。
-
你使用的是游标API还是事件迭代器API?
-
我强烈建议您使用适当的分析器来找到您的瓶颈,否则您将花费很长时间来追逐疯狂的猜测。
标签: java xml-parsing