性能:DOM-XPath与键值查找

时间:2013-12-07 20:20:28

标签: java xml performance dom

我正在寻求一些有关避免潜在性能问题的设计建议。

简短版本:一般来说,使用XPath查询DOM比查询两个哈希图要慢多少?

更长和更具体的版本:

我正在创建一个Java应用程序,它必须在启动时读取XML文件。该文件可能最多配置8200个属性,如下面的XML所示。从理论上讲,最多有100个映射元素,每个元素有2个属性。每个元素包含1到40个具有成对属性的元素。所以共有(40 * 2)* 100 + 200个文本属性。

<mapping source="A" target="B">
    <field fname="" tname=""/>
    <field fname="" tname=""/>  
    <field fname="" tname=""/>  
    <field fname="" tname=""/>
</mapping>

我想到了将信息提取到2个哈希映射中,然后在程序执行期间用它来进行查找。我只想找到映射“源”,我将从中查找相应的“目标”,然后使用任何子句“fname”查找相应的“tname”。

我只是想知道,与创建(例如)“mappings class”(本身包含fname / tname的hashmap)的hashmap相比,每次我想要一些信息时使用XPath和查询DOM的速度会慢多少kv对...

提前感谢任何提示,并希望这是有道理的。

凯文

2 个答案:

答案 0 :(得分:1)

过早优化是(几乎)所有邪恶的根源。

你的代码是否很慢?

- &GT;否:保持原样

- &GT;是的:测量它并修复瓶颈(如果找到)。

但根据我的经验:XPath在大多数情况下都是在DOM上实现的。这是某种内存开销。

相信 HashMap会更快,消耗更少的内存。

答案 1 :(得分:1)

您当然会在适当的界面背后隐藏实现,无论它是什么?

interface Target {
  String target();
  String tname(String fname);
}

interface Mapping {
   Target get(String source);
}

除此之外,我非常确定在这种情况下HashMaps的性能会超过XPath,但由于你的界面没有显示实现,你可以随意更改它。