golang 计算代码运行时间


前言

我们编写程序时,有时需要统计代码运行时间,比如记录视频解码耗时,以及视频的播放帧率等以确认性能满足,或者记录代码运行时长作为优化的依据。通常的做法是定义一个变量记录起始时间,在结束时获取当前时间减去起始时间,本文为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进行了一个封装,主要目的是方便调用,而且也将均值计算出来了,这样有利于对数据的统计,总的来说还是有一定适用场景的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeOfCC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值