【问题标题】:Use GZIP to boost XML-parsing使用 GZIP 增强 XML 解析
【发布时间】:2009-03-26 15:58:37
【问题描述】:

我面临处理许多大于 70 MB 的 xml 文件的问题。验证和访问它们需要花费大量时间。现在我想知道以下步骤是否可以提高我的应用程序性能。

我可以将一个 70MB 的 xml 文件压缩成一个小于 1MB 的 gzip 文件。 所以我只能保存 gzip 文件。 可以这样处理数据:

  • 通过 java.io.File 使 gzip 可用(仅小文件)
  • 例如使用 StringBufferInputStream 和 GZIPInputStream 来提取 RAM 中的内容
  • 处理内容 (RAM):解析、验证、...
  • 在 RAM 中创建一个表示新 xml 内容 (RAM) 的字符串
  • 使用GZIPOutputStream访问文件系统(又是小内容)

我可以这样做还是我的想法有误解?

提前谢谢! 汉斯

【问题讨论】:

    标签: xml performance gzip


    【解决方案1】:

    从 HD 读取 70 MB 应该不超过 1-2 秒(当然取决于您的硬件),所以如果您的延迟大于 4 秒,那么瓶颈不是您的 HD但是 XML 处理和你用它做的任何事情。

    在开始编写您的 gzip 想法之前(听起来不错),您可以将示例 XML 硬编码到您的代码中(是的,插入 70 MB 作为单个字符串),运行您的应用程序并使用一个漂亮的按钮说(“做吧! ") - 或者如果您在终端中等待用户输入 - 看看 XML 处理需要多少时间。

    这种方法会在处理之前将您的 70 megs 加载到内存中(作为代码),因此您应该能够看到消耗它真正需要多少。

    之后,如果您看到它的处理速度足够快,那么问题显然出在 HD 上。如果没有,那么您应该尝试优化您的 XML 处理。

    【讨论】:

    • 好吧,我当然要玩一些场景,我也会测试你的。
    • 我的问题的根源是,有很多对大文件的访问。例如,在应用程序启动时,我的导航器必须检查(验证)文件夹中的所有文件以进行正确的图标装饰或报告无效。
    • 此外,我不能将内存中的每个已解析文件都保存为 Java 对象,因为这会导致 RAM 爆炸。
    • 磁盘碎片也可能是罪魁祸首......你必须玩弄:)
    • 如果您在 RAM 中保存 xml 文件时遇到问题,那么将它们压缩到磁盘或从磁盘中压缩将无济于事。你能把它们解析成更有效的内存结构而不是xml dom吗?或者,冒着重新定义问题的风险,您可以使用 SAX 吗?
    猜你喜欢
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多