我正在寻求一些有关避免潜在性能问题的设计建议。
简短版本:一般来说,使用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对...
提前感谢任何提示,并希望这是有道理的。
凯文
答案 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,但由于你的界面没有显示实现,你可以随意更改它。