浏览 2935 次
|
锁定老贴子 主题:DOM4J的性能问题
精华帖 (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经验的人看看是怎么回事,谢谢。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2005-10-07
经过测试 发现确实是使用xpath的问题 把代码中所有的document.selectNodes替换掉,性能有了很大提升,不过还是比jaxp慢上好几倍,问题还是出在SaxReader.read(filename)上,花掉了2/3的时间。
|
|
| 返回顶楼 | |
|
最后更新时间:2005-10-08
terrine 写道 经过测试 发现确实是使用xpath的问题 把代码中所有的document.selectNodes替换掉,性能有了很大提升,不过还是比jaxp慢上好几倍,问题还是出在SaxReader.read(filename)上,花掉了2/3的时间。
去试试xpp3,解析速度比jaxp快一个量级。 dom4j就不要难为人家了。 |
|
| 返回顶楼 | |
|
最后更新时间:2005-10-10
xpp3以前没有听说过,根据ibm developworks上面的测试,dom4j应该是很快的,我又换了台机器测试,情况依然没有变化,困惑
|
|
| 返回顶楼 | |
|
最后更新时间:2005-10-10
对xml读取往往都是在程序最初的初始化时进行,初始化后xml的信息往往都放在缓存里,不用太过考虑性能的问题啊。
|
|
| 返回顶楼 | |
|
最后更新时间:2005-10-11
如果要性能,应该用SAX解析。如果要方便,用DOM4J。DOM和SAX性能上的差别,可以差几百倍或更多,取决于文件的大小。DOM4J应该比DOM还慢一点。
|
|
| 返回顶楼 | |
|
最后更新时间:2005-10-11
引用 我现在要从xml文件中读取数据生成对象...
单纯的数据读取就不要用DOM或者DOM4J了,用SAX就行,方便而且很快。DOM模型慢的原因就在于它在内存中建立了节点树,而SAX是个过程化的模型,把文件扫描一遍,找到需要的数据就算完。 |
|
| 返回顶楼 | |
|
最后更新时间:2005-10-12
目前xml -> object最快的就是jibx了。
|
|
| 返回顶楼 | |
|
最后更新时间:2005-12-09
你测试的肯定不准,除非是你的机器硬件太差!
一般,DOM4J解析一个不太大的配置文件40~90ms, 你在测试下。 我这边测试过。 |
|
| 返回顶楼 | |








