gpt4 book ai didi

java - 更快的多重解析 : SAX or DOM

转载 作者:行者123 更新时间:2023-12-01 23:36:51 26 4
gpt4 key购买 nike

我读过很多帖子,说 SAX 比 DOM 更快。我不确定我的问题是否愚蠢,但我认为如果我们有巨大的内存,DOM 一定会更快。因为一旦树结构加载到内存中,它应该比 SAX 更快。

我需要一些澄清,请帮助我理解。我有一个用例,我每天收到一个巨大的文件要解析多次。我可以说 DOM 在第一次解析时可能比 SAX 慢一点,并且在 DOM 的情况下,所有后续解析都会快得多,因为它将整个文档结构加载到内存中并重用它。如果是这样,那么我们怎么能说 SAX 比 DOM 更快呢?如果我错了,请纠正我。如果明天我更改 XSD 并需要将新结构推送到内存中,那么有什么方法可以在不重新启动应用程序的情况下完成此操作。

最佳答案

我们在以下情况下使用 SAX:

  1. 我们确信只需对文件进行一次传递就足够了。顺便说一句,这在大多数情况下都是如此。执行多次传递或向后/前进指针的代码大多数情况下可以重构为一次传递工作。

  2. 当我们通过某些流媒体 channel (例如通过网络)接收 xml 文件时,我们甚至希望在整个文件完全下载之前进行实时读出。 SAX 可以处理部分下载的文件,而 DOM 则不能。

  3. 当我们对 XML 中的特定位置而不是完整文档感兴趣时。例如,Atom Feed 与 SAX 配合使用效果最佳,但要分析 WSDL,您将需要 DOM。

我们在以下情况下使用 DOM:

  1. 当单遍不行时。我们需要在文件中上下移动。

  2. 当 XML 位于磁盘上并且我们不需要实时读数时。我们可以慢慢来,加载它,阅读它,分析它,然后得出结论。

  3. 当你的老板要求在午餐前做,而你不关心质量时。

现在回答你的问题

您提供:

  1. 你有一个巨大的文件:........SAX +1
  2. 多次解析:.....DOM +1

两人获得平等的选票。添加您现有的知识库。 (熟悉 SAX 吗?)。多大才算是巨大呢?你所说的 XML 和内存都很大。即使是 100MB 的文件也没什么大不了的。 DOM 可以处理它。每天需要解析多次。如果一个操作只需要几分钟,那么在接下来的几个小时内将数据保留在内存中似乎并不明智。在这种情况下,您将失去 DOM 的优势。但如果一个操作本身需要一个小时,那么你保留预处理的信息是完全正确的。

正如我所指出的,您没有提供足够的统计数据。统计数据大小、内存大小、DOM 加载时间、处理时间,您一天到底需要多少次?您的机器在此期间做什么?闲着还是分析其他此类文件?

获取这些统计数据。要么发布在这里,要么自己分析一下,你就会得出结论。

关于java - 更快的多重解析 : SAX or DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18544549/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com