项目中一个功能很耗时,头儿让我看看是什么原因造成的,看能不能有什么调优。
分析原因时得用数据支持吧, 也就是说看都有哪些因素造成了耗时,各贡献值具体是多少。顺着这个思路想起来和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
记在这里备查,分享,交流。
分享到:
相关推荐
Stopwatch
Visual C++源代码 26 如何使用Stopwatch实现高精度计时Visual C++源代码 26 如何使用Stopwatch实现高精度计时Visual C++源代码 26 如何使用Stopwatch实现高精度计时Visual C++源代码 26 如何使用Stopwatch实现高精度...
StopWatch StopWatch StopWatch StopWatch StopWatchStopWatchStopWatchStopWatchStopWatchStopWatch
主要介绍了Java计时新姿势StopWatch,最近公司来了个大佬,从他那里学到不少东西,其中一个就是计时的新姿势「StopWatch」,需要的朋友可以参考下
matlab开发-Stopwatch。显示键盘或按钮输入的运行时间
一个用到匿名委托的几种方法及Stopwatch计算时间间隔的例子
使用Stopwatch实现高精度计时
保证好用,本人亲自写的,防展讯的Stopwatch,提供秒表的功能。
CSharp 4.0 .Net Framework V4.0 Stopwatch 类
基于Flutter构建的stopwatch app..zip,颤振中的简单秒表示例应用程序
博文《C#计时利器:Stopwatch的使用》中的源代码。
c#Stopwatch秒表 准确性远远高于Timer
Android:StopWatchAndroid:StopWatchAndroid:StopWatchAndroid:StopWatchAndroid:StopWatchAndroid:StopWatchAndroid:StopWatchAndroid:StopWatch秒表应用
基于FPGA设计一个数字跑表,具有复位、暂停、秒表等功能。包含完整工程,目录下DOC文件夹内有该工程详细介绍。代码简洁,注释详尽。经测试使用,功能完好,性能优良。
如何使用Stopwatch实现高精度计时C#.net源代码编写
General Digital Clock Clock setting with Switch – Use Key_up and Key_down key to change the number – Use Key_right and Key_left key to change the position – Use set key to start Clock ...
C51单片机秒表实验,C程序代码,结合单片机学习笔记——秒表>文章的同步使用。原本只是学校的实验内容,代码纯手工自行打造,仅供各位参考,文章和代码有不到之处还请看官批评指正
这是本人在几年前写的小程序,当时用Moto Q8,晚上想测心跳,苦于没有计时器,就自己写了一个。对新人应该很有帮助。算法还是有待改进的,有兴趣的朋友一起来做哦。可以改成Android版、Bada版,等等
不能正常运行的备用资料,主要是图片资料,含秒表参考代码
基于Emwin 简单的秒表代码,可以开始记时、停止、继续、重置。LCD的宽高设置的比较低,大家可以根据自己的实际情况调节