Java 性能:domxpath与键值查找

Java 性能:domxpath与键值查找,java,xml,performance,dom,Java,Xml,Performance,Dom,我正在寻求一些关于避免潜在性能问题的设计建议 简短版本:一般来说,使用XPath查询DOM比查询两个HashMap慢多少 更长的mpre特定版本: 我正在创建一个Java应用程序,作为启动的一部分,它必须读取XML文件。该文件最多可能配置8200个属性,如下面的XML所示。理论上,最多有100个映射元素,每个元素有2个属性。每个元素包含1到40个具有属性对的元素。所以总共有(40*2)*100+200个文本属性 <mapping source="A" target="B">

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

简短版本:一般来说,使用XPath查询DOM比查询两个HashMap慢多少

更长的mpre特定版本:

我正在创建一个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个hashmaps中,然后在程序执行期间使用这些hashmaps进行查找。我只对查找映射“source”感兴趣,我将从中查找相应的“target”,然后使用任何子“fname”查找相应的“tname”

我只是想知道,每次我需要一些信息时,使用XPath和查询DOM会比创建(例如)一个“映射类”的hashmap慢多少,它本身包含fname/tname对的hashmap

提前感谢您提供的任何提示,希望这是有意义的


凯文

过早优化几乎是万恶之源

你的代码慢吗

->不,就这样吧

->是:测量并修复瓶颈(如果发现)

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


我相信HashMap会更快,占用更少的内存。

您当然会将实现隐藏在适当的接口后面,不管它是什么

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

interface Mapping {
   Target get(String source);
}

除此之外,我非常确定HashMaps在这种情况下的性能会优于XPath,但是因为您的接口没有显示实现,所以您可以随意更改它。

什么是aprox。xml的文件大小?