有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java性能:DOMXPath与键值查找

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

简短版本:一般来说,使用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>

我想到了将信息提取到两个哈希图中,然后在程序执行期间使用它们进行查找。我只对查找映射“source”感兴趣,我将从中查找相应的“target”,然后使用任何子“fname”来查找相应的“tname”

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

提前感谢你的建议,希望这是有意义的

凯文


共 (2) 个答案

  1. # 1 楼答案

    你当然会把实现隐藏在一个合适的接口后面,不管它是什么

    interface Target {
      String target();
      String tname(String fname);
    }
    
    interface Mapping {
       Target get(String source);
    }
    

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

  2. # 2 楼答案

    过早优化是(几乎)万恶之源

    你的代码慢吗

    ->;不,就这样吧

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

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

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