我的StopWatch
项目中一个功能很耗时,头儿让我看看是什么原因造成的,看能不能有什么调优。
分析原因时得用数据支持吧, 也就是说看都有哪些因素造成了耗时,各贡献值具体是多少。顺着这个思路想起来和apache中common框架中的一个工具类org.apache.commons.lang.time StopWatch。
它很好的模拟了秒表,通过它的split方法和getSplitTime方法,可以很好地看出各分步骤对性能下降的贡献值来。
演示代码如下:
org.apache.commons.lang.time.StopWatch stWatch = new org.apache.commons.lang.time.StopWatch(); stWatch.start(); step1(); stWatch.split(); System.out.println("Time consumed by step1: "+stWatch.getSplitTime()); step2(); stWatch.split(); System.out.println("Time consumed by step1 and step2: "+stWatch.getSplitTime()); stWatch.stop();
显示结果:
Time consumed by step1: 31
Time consumed by step1 and step2: 2031
还行,这毕竟比手动地写System.currentTimeMillis() – startTime来实现面向对象些。
但有些不足,从结果可以看出,每次getSplitTime得到的值都是当前所有步骤的总和,而不是当前这个步骤的耗时值,以上面代码为例,它没有直接地得出step1和step2两个步骤的各自耗。有些遗憾啊。
改!
于是原来基础上加了两个方法(加了方法的源码见附件): splitAndSaveTime和getSplitTimeByStep。这样的演示代码如下:
MyStopWatch stWatch = new MyStopWatch(); stWatch.start(); step1(); stWatch.splitAndSaveTime(); System.out.println("Time consumed by step1: "+stWatch.getSplitTimeByStep()); step2(); stWatch.splitAndSaveTime(); System.out.println("Time consumed by step2: "+stWatch.getSplitTimeByStep()); stWatch.stop();
输出结果顺眼多了:
Time consumed by step1: 63
Time consumed by step2: 2000
记在这里备查,分享,交流。
-
本文附件下载:
- MyStopWatch.rar (1.7 KB)
作者: rmn190
声明: 本文系JavaEye网站发布的原创文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!
已有 0 人发表回复,猛击->>这里<<-参与讨论
JavaEye推荐
- 北京:手机之家网站诚聘PHP程序员
- 上海:月薪1-2万诚聘资深PHP开发人员
- 上海:天会皓闻诚聘CTO技术总监
- 上海:天会皓闻诚聘资深Java架构师
- 上海:高薪诚聘Python开发人员
- 成都:月薪5千到1万招聘Java开发工程师
- 北京:高薪招聘Java搜索开发工程师
作者:Fervour
出处:http://fervour.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://fervour.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。