昨天写了这样一段处理xml的代码,处理系统返回的结果,最后居然导致系统死慢死慢的,我百思不得其解,到底是Document类处理的问题呢?还是数据过多?
private void formatResults(Condition condition) { NodeList results = doc.getElementsByTagName("result"); try { for (int i = 0; i < results.getLength(); i++) { expr = xpath.compile("child::binding[@name='" + condition.patternPara + "']"); Node node = results.item(i); Node e1 = (Node) expr.evaluate(node, XPathConstants.NODE); node.removeChild(e1); } } catch (XPathExpressionException e) { e.printStackTrace(); } }
就这样一段简单的代码~
最后终于。。请教了同事,一眼看出了问题
expr = xpath.compile("child::binding[@name='" + condition.patternPara + "']");
这一句是速度低的关键!!!!!
原来是每进入循环一次,就执行一次xpath的编译,这样如何能不慢!!!
将其移除到循环外后,速度上去多了~
我想,在我的代码中很可能还存在着很多类似的问题,每天不停的写代码,马不停蹄的赶工。学生时代赶作业稀里糊涂完成功能的习惯没有改掉。敲代码的时候,更多的是一种习惯和经验,这个应该这样写,应该那样写。作为一个程序员,应该严谨一些,这种低级错误必须杜绝。以后写循环的时候,一定要三思,记得循环的次数是不可控的,你写一句它就有可能执行N次!
一定要养成良好的编程习惯,完成任务之余多斟酌一下自己的代码!