前言
我们编写程序时,有时需要统计代码运行时间,比如记录视频解码耗时,以及视频的播放帧率等以确认性能满足,或者记录代码运行时长作为优化的依据。通常的做法是定义一个变量记录起始时间,在结束时获取当前时间减去起始时间,本文为go语言版将上述操作封装为一些对象方便使用。
一、计算范围时间
1、起始位置
begin := time.Now()
2、结束位置
costTime := time.Now().Sub(begin).Seconds()
封装成对象
(1)、完整代码
package utils
import "time"
//统计范围代码执行时间
type RangeCodeTime struct {
begin time.Time
maxAvgCount int
sum float64
queue []float64
}
//构造方法,参数是计算均值的最大总数
func RangeCodeTimeNew(maxAvgCount int) *RangeCodeTime {
return &RangeCodeTime{
maxAvgCount: maxAvgCount,
sum: 0,
}
}
func (rct *RangeCodeTime) Begin() {
rct.begin = time.Now()
}
//返回当前耗时,单位秒,平均时间,单位秒
func (rct *RangeCodeTime) End() (costTime, average float64) {
costTime = time.Now().Sub(rct.begin).Seconds()
rct.sum += costTime
rct.queue = append(rct.queue, costTime)
average = rct.sum / float64(len(rct.queue))
if len(rct.queue) >= rct.maxAvgCount {
rct.sum -= rct.queue[0]
rct.queue = rct.queue[1:]
}
return
}
(2)、使用示例
var rct = RangeCodeTimeNew(60)
func test() {
rct.Begin()
//需要计算时长的代码
time.Sleep(time.Microsecond * 50)
//...
cost, avg := rct.End()
print("当前耗时:" + fmt.Sprintf("%f", cost) + "s 平均耗时:" + fmt.Sprintf("%f", avg) + "s")
}
效果预览
总结
以上就是今天要讲的内容,本文简单的对time进行了一个封装,主要目的是方便调用,而且也将均值计算出来了,这样有利于对数据的统计,总的来说还是有一定适用场景的。