写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次!

 

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

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值