【问题标题】:Optimization on VTD-XML parse?VTD-XML 解析的优化?
【发布时间】:2016-08-17 14:30:42
【问题描述】:

我必须对VTD-XML库进行性能测试,以便不仅可以进行简单的解析,还可以在解析中进行额外的转换。 所以我有 30MB 的输入 XML,然后我用自定义逻辑将其转换为其他 XML。 所以我想消除所有会减慢我这边整个过程的想法(因为没有很好地使用VTD库)。 我试图搜索优化提示,但找不到它们。 我通知说:

'0'。选择 selectXPath 还是 selectElement 哪个更好?

  1. 使用没有命名空间的解析要快得多。

    File file = new File(fileName);
    VTDGen vtdGen = new VTDGen(); 
    vtdGen.setDoc_BR(new byte[(int) file.length()]); 
    vtdGen.parse(false);
    
  2. Read from byte or passVTDGen ?

    final VTDGen vg = new VTDGen();
    vg.parseFile("books.xml", false);
    

// open a file and read the content into a byte array
File f = new File("books.xml");
FileInputStream fis = new FileInputStream(f);
byte[] b = new byte[(int) f.length()];
fis.read(b);

VTDGen vg = new VTDGen();
vg.setDoc(b);
vg.parse(true);

使用第二种方法 - 速度快 0.01 倍......(可以来自任何东西)

与 parseFile 有什么区别,文件在 namespaceaware true 和 1GB witout 的情况下限制为 2GB,但是字节方法呢?

  1. 重用缓冲区

您可以要求 VTDGen 为下一个解析任务重用 VTD 缓冲区。 否则,默认情况下,VTDGen 将为每个 解析运行。

你能举个例子吗?

  1. 将 LC 级别调整为 5

默认是3。但是你可以设置为5。当你的XML很深 嵌套,将 LC 级别设置为 5 会导致更好的 XPath 性能。但 它会略微增加内存使用量和解析时间。

    VTDGen vg = new VTDGen();
    vtdGen.selectLcDepth(5);

但有运行时异常。仅适用于 3

  1. 索引

使用 VTD+XML 索引——而不是在解析 XML 文件时 处理请求,您可以将您的 XML 预索引为 VTD+XML 格式和 将它们转储到磁盘上。当处理请求开始时,只需加载 内存中的VTD+xml,不用再解析了!!

  VTDGen vg = new VTDGen();
    if (vg.parseFile(inputName,true)){
       vg.writeIndex(new FileOutputStream(outputName));
     }

有人知道怎么用吗?如果文件更改会发生什么,如何触发新的重新索引。如果 3GB 中有 10kb 的变化,解析是否需要时间来解析整个新文件或仅用于更改的行?

  1. 覆盖功能

又名覆盖功能。数据模板 - 因为 VTD-XML 保留 内存中的 XML 原样,您实际上可以创建模板 XML 文件 (在 vtd+xml 中预索引),其值字段留空并让 您的应用程序填补了空白,从而创建了永远不需要的 XML 数据 被解析。

【问题讨论】:

    标签: java xml performance vtd-xml


    【解决方案1】:

    我认为您应该查看与 vtd-xml 版本捆绑在一起的示例......并逐渐建立专业知识......幸运的是,在我看来,vtd-xml 是最简单的 XML API 之一...... . 所以学习曲线不会像 SAX/STAX 那样困难。

    我对上面编号列表的回答...

    1. selectXPath 用于 xpath 评估。 selectElement 类似于 getElementByTag()

    2. 打开命名空间感知对解析性能几乎没有影响...您能否参考您的 100 倍减速声明的来源?

    3. 您可以从字节中读取或直接从文件中读取...这是博客文章的链接

      https://ximpleware.wordpress.com/2016/06/02/parsefile-vs-parse-a-quick-comparison/

    3.缓冲区重用在某种程度上是一项高级功能..让我们稍后再谈

    4.如果您获得最新版本(2.13),您将不会在该方法调用时遇到运行时异常...

    1. 要解析大于 2GB 的 xml 文档,您需要切换到 vtd-xml 的扩展版,它是与标准 vtd-xml 捆绑在一起的单独 API...

    2. 有一些与 vtd-xml 分发捆绑在一起的示例,您可能想先看看这些示例...这里有一篇关于这个主题的文章 http://www.codeproject.com/Articles/24663/Index-XML-Documents-with-VTD-XML

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 2014-03-30
      相关资源
      最近更新 更多