【问题标题】:libxml2 from java来自java的libxml2
【发布时间】:2011-04-11 16:54:19
【问题描述】:

这个问题有点相关 Fastest XML parser for small, simple documents in Java 但还有更多细节。

我正在开发一个需要解析许多(数以千万计)小型(大约 300k)xml 文档的应用程序。当前的实现使用 xerces-j,在 1.5 GHz 机器上每个 xml 文档大约需要 2.5 ms。我想改进这个性能。我偶然发现了这篇文章

http://www.xml.com/pub/a/2007/05/16/xml-parser-benchmarks-part-2.html

声称 libxml2 的解析速度比任何 java 解析器都要快一个数量级。我不确定我是否相信,但它引起了我的注意。 有人试过使用 jvm 中的 libxml2 吗?如果是这样,它是否比 java dom 解析(xerces)更快? 我想我仍然需要我的 java dom 结构,但我猜从 c 结构的 dom 复制到 java-dom 应该用不了多久。我必须有 java-dom - 在这种情况下 sax 对我没有帮助。

更新:我刚刚为 libxml2 编写了一个测试,它并没有比 xerces 快...因为我的 c 编码能力非常生疏。

更新我在这里稍微扩大了这个问题: why is sax parsing faster than dom parsing ? and how does stax work? 并对放弃 dom 的可能性持开放态度。

谢谢

【问题讨论】:

    标签: java xml dom libxml2 xerces


    【解决方案1】:

    在 Java 中,StAX JSR-173 通常被认为是解析 XML 的最快方法。 StAX 有多种实现,Woodstox 实现通常被认为是快速的。

    为了提高性能,我会避免使用 DOM。你在用 XML 做什么?如果您最终将其作为对象处理,则应考虑使用 OXM 解决方案。标准是 JAXB JSR-222MOXy(我是技术负责人)等 JAXB 实现甚至允许您进行部分映射,从而提高性能:

    【讨论】:

    • 关于放弃 DOM - 我不能也不想解释原因。
    • 感谢您的意见。我改变主意了。如果可以的话,我愿意放弃 dom 并更多地解释我在做什么。我在这里创建了一个新问题:stackoverflow.com/questions/3825206/…
    【解决方案2】:

    首先,您的问题不包含问题。你想知道什么?

    我想您是在使用 JNI 将 c-dom 转换为 java-dom。不知道有没有官方的数字,但是根据我的经验,c+JNI往往比直接用java做要慢。

    如果你真的想加快你的处理速度,试着摆脱 dom(你为什么需要它?也许我们可以一起想一个解决方案)。如果所有 xml 文件都具有相同的模式,请使用您自己的专用数据模型(和 SAX 解析器)。

    如果您只使用 xml 的子集(即没有命名空间,只有少数属性),请考虑编写自己的解析器,直接生成更高效的 java 对象(但我不建议这样做)。

    【讨论】:

    • 我加粗并添加了问号。关于放弃 DOM - 我不能也不想解释原因。
    • 感谢您的意见。我改变主意了。如果可以的话,我愿意放弃 dom 并更多地解释我在做什么。我在这里创建了一个新问题:stackoverflow.com/questions/3825206/…
    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    • 2015-01-26
    • 2020-06-17
    • 1970-01-01
    • 2011-08-27
    • 2016-10-20
    • 2023-03-10
    相关资源
    最近更新 更多