Golang 函数耗时统计
本文内容纲要:
-
-
-1.朴素方法
-2.简洁方法
-3.优雅方法
当时候需要去计算一段代码或一个程序所消耗时间的时候,就需要进行统计时间,用程序去计算某一段代码的执行所需要的时间远比用眼睛直接去看程序运行时间高很多。
go语言中的time包中提供了函数来提供计算消耗时间,具体的使用方式如下案例所示:
bT:=time.Now()//开始时间
eT:=time.Since(bT)//从开始到当前所消耗的时间
fmt.Println("Runtime:",eT)
1.朴素方法
在函数起始位置计算当前时间,在函数结束位置算出耗时。
packagemain
import(
"fmt"
"time"
)funcsum(nint)int{startT:=time.Now()//计算当前时间total:=0fori:=1;i<=n;i++{total+=i}tc:=time.Since(startT)//计算耗时fmt.Printf("timecost=%v\n",tc)returntotal}funcmain(){count:=sum(100)fmt.Printf("count=%v\n",count)}
编译运行输出:
timecost=350ns
count=5050
2.简洁方法
计算当前时间与计算耗时放在两处,难免显得丑陋,且不易阅读。如果有多个函数需要统计耗时,那么多处书写重复的两行代码会造成代码冗余。由于Golang提供了函数延时执行的功能,借助defer,我们可以通过函数封装的方式来避免代码冗余。
packagemain
import(
"fmt"
"time"
)//@brief:耗时统计函数functimeCost(starttime.Time){tc:=time.Since(start)fmt.Printf("timecost=%v\n",tc)}funcsum(nint)int{defertimeCost(time.Now())total:=0fori:=1;i<=n;i++{total+=i}returntotal}funcmain(){count:=sum(100)fmt.Printf("count=%v\n",count)}
编译运行输出:
timecost=1.574µs
count=5050
通过输出可以看到sum()耗时增加了,因为增加了一次timeCost()函数调用。不过相比于函数封装带来的便利与代码美观,新增的耗时是微不足道可以接受的。
3.优雅方法
每次调用耗时统计函数timeCost()都需要传入time.Now()
,重复书写time.Now()
无疑造成了代码冗余。我们在上面的基础上,进行进一步的封装,实现如下。
packagemain
import(
"fmt"
"time"
)//@brief:耗时统计函数functimeCost()func(){start:=time.Now()returnfunc(){tc:=time.Since(start)fmt.Printf("timecost=%v\n",tc)}}funcsum(nint)int{defertimeCost()()//注意,是对timeCost()返回的函数进行调用,因此需要加两对小括号total:=0fori:=1;i<=n;i++{total+=i}returntotal}funcmain(){count:=sum(100)fmt.Printf("count=%v\n",count)}
编译运行输出:
timecost=1.204µs
count=5050
转:https://cloud.tencent.com/developer/article/1447903
本文内容总结:,,1.朴素方法,2.简洁方法,3.优雅方法,
原文链接:https://www.cnblogs.com/unqiang/p/11757086.html