【发布时间】:2016-08-17 14:30:42
【问题描述】:
我必须对VTD-XML库进行性能测试,以便不仅可以进行简单的解析,还可以在解析中进行额外的转换。 所以我有 30MB 的输入 XML,然后我用自定义逻辑将其转换为其他 XML。 所以我想消除所有会减慢我这边整个过程的想法(因为没有很好地使用VTD库)。 我试图搜索优化提示,但找不到它们。 我通知说:
'0'。选择 selectXPath 还是 selectElement 哪个更好?
-
使用没有命名空间的解析要快得多。
File file = new File(fileName); VTDGen vtdGen = new VTDGen(); vtdGen.setDoc_BR(new byte[(int) file.length()]); vtdGen.parse(false); -
Read from byte or pass 到 VTDGen ?
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,但是字节方法呢?
- 重用缓冲区
您可以要求 VTDGen 为下一个解析任务重用 VTD 缓冲区。 否则,默认情况下,VTDGen 将为每个 解析运行。
你能举个例子吗?
- 将 LC 级别调整为 5
默认是3。但是你可以设置为5。当你的XML很深 嵌套,将 LC 级别设置为 5 会导致更好的 XPath 性能。但 它会略微增加内存使用量和解析时间。
VTDGen vg = new VTDGen();
vtdGen.selectLcDepth(5);
但有运行时异常。仅适用于 3
- 索引
使用 VTD+XML 索引——而不是在解析 XML 文件时 处理请求,您可以将您的 XML 预索引为 VTD+XML 格式和 将它们转储到磁盘上。当处理请求开始时,只需加载 内存中的VTD+xml,不用再解析了!!
VTDGen vg = new VTDGen();
if (vg.parseFile(inputName,true)){
vg.writeIndex(new FileOutputStream(outputName));
}
有人知道怎么用吗?如果文件更改会发生什么,如何触发新的重新索引。如果 3GB 中有 10kb 的变化,解析是否需要时间来解析整个新文件或仅用于更改的行?
- 覆盖功能
又名覆盖功能。数据模板 - 因为 VTD-XML 保留 内存中的 XML 原样,您实际上可以创建模板 XML 文件 (在 vtd+xml 中预索引),其值字段留空并让 您的应用程序填补了空白,从而创建了永远不需要的 XML 数据 被解析。
【问题讨论】:
标签: java xml performance vtd-xml