程序性能提高之点滴积累_用户1322713352_新浪博客

今天写一个小程序,其中有这么一段

File d = new File(dir.trim());
if (d == null || !d.exists() || !d.canRead()) {
return false;
}
String path = d.getCanonicalPath();

if (dirLevel == 1) {
String parent = d.getParent();
this.parentPath = (parent == null) ? "" : parent;
}

fileList.add(path);
pathTable.put(path, this.parentPath);

其中,

this.parentPath = (parent == null) ? "" : parent;

这一句,很多人为了省一个变量,写成是

this.parentPath = (d.getParent() == null) ? "" : d.getParent();

虽然看起来,没有什么不对的,但是我总觉得不太好,多调用了一次getParent()方法,在小的程序里和我的写法出入不大,性能也不会出现大的差异,但是如果在一个非常庞大的业务系统里面,很可能就有影响了。于是,我想再写个小程序来验证一下我的想法。


package jcms.util;

import java.io.File;
import java.io.IOException;

public class Testit {


public static void main(String[] args) {
String s = "C:\\windows\\win.ini";
File f = new File(s);
int len = 10;
System.out.println("len=" + len);
try {
String a = "";
String t = "";
long t1 = System.currentTimeMillis();
for (int i = 0; i < len; i++) {
t = "path=" + f.getCanonicalPath() + ",size=" + f.length();
a = t;
}
long t2 = System.currentTimeMillis();
System.out.println(a);
System.out.print("time1=");
System.out.println(t2 - t1);

// ----------------------------------
long t11 = System.currentTimeMillis();
t = "path=" + f.getCanonicalPath() + ",size=" + f.length();
for (int i = 0; i < len; i++) {
a = t;
}
long t12 = System.currentTimeMillis();
System.out.println(a);
System.out.print("time2=");
System.out.println(t12 - t11);

} catch (IOException e) {
e.printStackTrace();
}
}

}

代码如上,程序很简单。分别做len次循环,打印直接在循环里调用方法的时间和在循环外调用方法的时间,然后来个比较。
分别取len=10,100,1000,10000,100000时的样本数据:

len=10
path=C:\WINDOWS\win.ini,size=624
time1=0
path=C:\WINDOWS\win.ini,size=624
time2=0

len=100
path=C:\WINDOWS\win.ini,size=624
time1=20
path=C:\WINDOWS\win.ini,size=624
time2=0

len=1000
path=C:\WINDOWS\win.ini,size=624
time1=100
path=C:\WINDOWS\win.ini,size=624
time2=0

len=10000
path=C:\WINDOWS\win.ini,size=624
time1=411
path=C:\WINDOWS\win.ini,size=624
time2=0

len=100000
path=C:\WINDOWS\win.ini,size=624
time1=3725
path=C:\WINDOWS\win.ini,size=624
time2=0

大家可以看出来,随着len的逐步递增,time1花的时间也越来越长,而time2几乎不变,也就是说调用方法的时间越来越长,程序的性能逐渐下降。
当然,在实际程序中是很少会出现这样的循环的,此处的循环是为了模拟系统的时间消耗的。

程序性能的提高,是有不少学问的。因为性能的问题,很多人大眼一看程序,程序没有错啊,没有问题啊,是的,程序没有问题,但是细节有问题。
比如像电信服务类的,计费类的,银联接口类的,如果程序不严谨,细节性能不注意,试想会出现什么样的后果?
打个电话接通了,1分钟后才能听到对方回音;银行ATM取个钱,按下按钮,5分钟后机器才反应……

程序性能提高,要从点滴积累开始。
呵呵,抛砖引玉了~





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值