`
lcf11824
  • 浏览: 86402 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

写For时请三思再三思

 
阅读更多

昨天写了这样一段处理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次!

 

一定要养成良好的编程习惯,完成任务之余多斟酌一下自己的代码!

 

 

 

3
5
分享到:
评论
1 楼 仅此而已 2011-08-12  
我觉得这句results.getLength();  也应该拿出来放到变量里。  减少资源浪费!

相关推荐

Global site tag (gtag.js) - Google Analytics