论坛首页 Java版

DOM4J的性能问题

浏览 2935 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
最后更新时间:2005-10-07
我现在要从xml文件中读取数据生成对象,开始是用jdk1.4自带的api来作,感觉太麻烦,代码看上去很乱,后来该用DOM4j来做,大量使用了xpath去获取节点,结果代码倒是少了很多,但是性能下降了接近10倍。
以下是我对两端代码的对比
读取文件,生成document:
jaxp:
[code:1]DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("XXX.xml");[/code:1]

dom4j:
[code:1]document= new SaxReader().read(filename);[/code:1]

这里dom4j就要花掉300-400ms,而jaxp只用不到60ms

后面的代码我主要贴出dom4j的,是根据同样的思路做的

[code:1]    List tempList = document.selectNodes("/A/E/EName");
        String[] temp = new String[tempList.size()];
        for (int i = 0; i < temp.length; i++) {
temp[i]=((Element) tempList.get(i)).getText();
}
        c.setEntities(temp);
       
        tempList = document.selectNodes("/a/Rs/R");
        temp = new String[tempList.size()];
        for (int i = 0; i < temp.length; i++) {
        temp[i]=((Element) tempList.get(i)).getText();
}
       
        Iterator tempIt = document.selectNodes("/A/C").iterator();
        if(!tempIt.hasNext())
        throw new Exception("");
        .....;
[/code:1]


不知道是我的用法有问题还是基于xpath的查找节点就是很慢,请有dom4j经验的人看看是怎么回事,谢谢。
   
最后更新时间:2005-10-07
经过测试 发现确实是使用xpath的问题 把代码中所有的document.selectNodes替换掉,性能有了很大提升,不过还是比jaxp慢上好几倍,问题还是出在SaxReader.read(filename)上,花掉了2/3的时间。
   
0 请登录后投票
最后更新时间:2005-10-08
terrine 写道
经过测试 发现确实是使用xpath的问题 把代码中所有的document.selectNodes替换掉,性能有了很大提升,不过还是比jaxp慢上好几倍,问题还是出在SaxReader.read(filename)上,花掉了2/3的时间。

去试试xpp3,解析速度比jaxp快一个量级。
dom4j就不要难为人家了。
   
0 请登录后投票
最后更新时间:2005-10-10
xpp3以前没有听说过,根据ibm developworks上面的测试,dom4j应该是很快的,我又换了台机器测试,情况依然没有变化,困惑
   
0 请登录后投票
最后更新时间:2005-10-10
对xml读取往往都是在程序最初的初始化时进行,初始化后xml的信息往往都放在缓存里,不用太过考虑性能的问题啊。
   
0 请登录后投票
最后更新时间:2005-10-11
如果要性能,应该用SAX解析。如果要方便,用DOM4J。DOM和SAX性能上的差别,可以差几百倍或更多,取决于文件的大小。DOM4J应该比DOM还慢一点。
   
0 请登录后投票
最后更新时间:2005-10-11
引用
我现在要从xml文件中读取数据生成对象...


单纯的数据读取就不要用DOM或者DOM4J了,用SAX就行,方便而且很快。DOM模型慢的原因就在于它在内存中建立了节点树,而SAX是个过程化的模型,把文件扫描一遍,找到需要的数据就算完。
   
0 请登录后投票
最后更新时间:2005-10-12
目前xml -> object最快的就是jibx了。
   
0 请登录后投票
最后更新时间:2005-12-09
你测试的肯定不准,除非是你的机器硬件太差!

一般,DOM4J解析一个不太大的配置文件40~90ms,
你在测试下。
我这边测试过。
   
0 请登录后投票
论坛首页 Java版

跳转论坛:
JavaEye推荐