首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VTD-XML解析的优化?

VTD-XML解析的优化?
EN

Stack Overflow用户
提问于 2016-08-17 14:30:42
回答 1查看 569关注 0票数 0

我必须对VTD-XML库进行性能测试,以便不仅进行简单的解析,而且在解析中进行额外的转换。所以我有30 to的输入XML,然后用自定义逻辑将它转换为其他XML。因此,我想删除所有减慢整个进程的想法(因为没有很好地使用VTD库)。我试图搜索优化技巧,但找不到。我裸露了:

“0”选择selectXPath或selectElement更好的方法是什么?

  1. 使用没有命名空间的解析要快得多。 文件文件=新文件(FileName);VTDGen vtdGen =新VTDGen();vtdGen.setDoc_BR(新字节(Int) file.length());vtdGen.parse(false);
  2. 从字节或传递读取 to VTDGen? VTDGen vg =新的VTDGen();vg.parseFile("books.xml",false);

代码语言:javascript
复制
// 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);

使用第二种方法

与parseFile有什么不同,文件是有限的,upTo 2GB,具有名称感知的true和1GB的witout,但是字节方法有什么区别呢?

  1. 重用缓冲器

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

你能举个例子吗?

  1. 将LC级别调整为5

默认情况下,它是3。但是您可以将其设置为5。当您的XML被深度嵌套时,将LC级别设置为5可以提高XPath性能。但是它稍微增加了内存使用和解析时间。

代码语言:javascript
复制
    VTDGen vg = new VTDGen();
    vtdGen.selectLcDepth(5);

但是有运行时异常。只与3工作

  1. 索引

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

代码语言:javascript
复制
  VTDGen vg = new VTDGen();
    if (vg.parseFile(inputName,true)){
       vg.writeIndex(new FileOutputStream(outputName));
     }

有人知道怎么用吗?如果文件发生了变化,如何重新编制新的索引呢?如果3GB中有10 or的变化,解析将需要时间来完成整个新的文件解析,还是只需要对更改的行进行分析?

  1. 覆盖特性

覆盖功能也就是。数据模板--因为vtd+xml将XML保留在内存中,所以您实际上可以创建一个模板XML文件(在vtd+xml中进行预索引),其值字段为空,并让应用程序填充空白,从而创建不需要解析的XML数据。

EN

回答 1

Stack Overflow用户

发布于 2016-08-17 19:59:10

我认为您应该看看与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的扩展版本,它是一个单独的API,与标准的vtd-xml捆绑在一起.
  2. 有一些与vtd-xml发行版捆绑在一起的示例,您可能首先想看看.这里有一篇关于这个主题的文章,http://www.codeproject.com/Articles/24663/Index-XML-Documents-with-VTD-XML
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38999505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档