Golang 函数耗时统计
当时候需要去计算一段代码或一个程序所消耗时间的时候,就需要进行统计时间,用程序去计算某一段代码的执行所需要的时间远比用眼睛直接去看程序运行时间高很多。
go语言中的 time 包中提供了函数来提供计算消耗时间,具体的使用方式如下案例所示:
bT := time.Now() // 开始时间
eT := time.Since(bT) // 从开始到当前所消耗的时间
fmt.Println("Run time: ", eT)
一、简单方法
在函数起始位置计算当前时间,在函数结束位置算出耗时。
package mainimport ("fmt""time"
)func sum(n int) int {startT := time.Now() //计算当前时间total := 0for i:=1; i <= n; i++ {total += i}tc := time.Since(startT) //计算耗时fmt.Printf("time cost = %v\n", tc)return total
}func main() {count := sum(100)fmt.Printf("count = %v\n", count)
}
编译运行输出:
time cost = 350ns
count = 5050
二、简洁方法
计算当前时间与计算耗时放在两处,难免显得丑陋,且不易阅读。如果有多个函数需要统计耗时,那么多处书写重复的两行代码会造成代码冗余。由于 Golang 提供了函数延时执行的功能,借助 defer ,我们可以通过函数封装的方式来避免代码冗余。
package mainimport ("fmt""time"
)//@brief:耗时统计函数
func timeCost(start time.Time){tc:=time.Since(start)fmt.Printf("time cost = %v\n", tc)
}func sum(n int) int {defer timeCost(time.Now())total := 0for i:=1; i <= n; i++ {total += i}return total
}func main() {count := sum(100)fmt.Printf("count = %v\n", count)
}
编译运行输出:
time cost = 1.574µs
count = 5050
通过输出可以看到sum()耗时增加了,因为增加了一次timeCost()函数调用。不过相比于函数封装带来的便利与代码美观,新增的耗时是微不足道可以接受的。
三、优雅方法
每次调用耗时统计函数timeCost()都需要传入time.Now(),重复书写time.Now()无疑造成了代码冗余。我们在上面的基础上,进行进一步的封装,实现如下。
package mainimport ("fmt""time"
)//@brief:耗时统计函数
func timeCost() func() {start := time.Now()return func() {tc:=time.Since(start)fmt.Printf("time cost = %v\n", tc)}
}func sum(n int) int {defer timeCost()() //注意,是对 timeCost()返回的函数进行调用,因此需要加两对小括号total := 0for i:=1; i <= n; i++ {total += i}return total
}func main() {count := sum(100)fmt.Printf("count = %v\n", count)
}
编译运行输出:
time cost = 1.204µs
count = 5050
Golang 函数耗时统计相关推荐
- Golang 打印耗时统计、纳秒级耗时统计(统计函数执行时间)
文章目录 Golang 打印耗时统计 普通demo 利用defer的简洁方法 利用defer更优雅的方法 纳秒级耗时统计 time.Now().UnixNano() Golang 打印耗时统计 参考U ...
- 常用函数(睡眠函数、函数耗时)
睡眠函数 const sleep= (time)=> new Promise((resolve)=>{setTimeout(resolve,time) }) 函数耗时统计(毫秒) cons ...
- 教你3个python「性能分析」工具,再也不用自己计算函数耗时了
文章目录 引言 1. cProfile:最便捷的性能分析 保存性能数据 查看性能数据 查看耗时最多的子函数 查看特定名称函数的耗时 2. timeit:计算小代码片段的耗时 3. IDE中的性能分析 ...
- Android魔镜:方法耗时统计插件Mirror-基础篇
晓锋,曾在PPTV工作,饿了么资深Android工程师,专注于Android单元测试.架构设计.性能优化.以及最新技术分享,个人博客:michaelzhong. 注:本篇是<Android魔镜: ...
- 神兵利器—Android方法耗时统计插件Mirror(上)
1 前言 1.1 发生背景 有一天,Boss跑过来说,下次迭代我们要做蜂鸟团队App性能调优.对于一个大型成熟的App应用,在业务稳定后,往往会更加关注性能相关的表现.那么,Android App的性 ...
- android 方法统计,神兵利器—Android方法耗时统计插件Mirror(上)
1 前言 1.1 发生背景 有一天,Boss跑过来说,下次迭代我们要做蜂鸟团队App性能调优.对于一个大型成熟的App应用,在业务稳定后,往往会更加关注性能相关的表现.那么,Android App的性 ...
- Qt QPushButton(二) 按下 ↓ 抬起↑ 耗时统计
Qt QPushButton(二) 按下 ↓ 抬起↑ 耗时统计 按钮按下抬起 今天第一次使用按钮的按下抬起的槽函数 ,所以想尝试一下 这里的四个QPushButton 我在↑上面添加了 pressed ...
- C++ 程序耗时统计
在编程过程中经常需要统计一个代码段的耗时,本文主要记录 C++ 常用的耗时统计方式. 系统存储时间常见的两种方式为: 存储从1970年到现在经过多少时间 使用结构体分别存储当前时间的年月日时分秒 主要 ...
- golang函数后的 {
golang函数后的'{',不能单独放一行 // 错误 func main() {println("hello world") }// 正确 func main() {printl ...
- electron/nodejs实现调用golang函数
https://www.jianshu.com/p/a3be0d206d4c 思路 golang 支持编译成c shared library, 也就是系统中常见的.so(windows下是dll)后缀 ...
最新文章
- springEL表达式
- 一季度手机出货量少了2800万部,有人要给「指条明路」
- 了解Spring Web应用程序体系结构:经典方法
- 聊聊spring cloud gateway的XForwardedHeadersFilter
- 23种设计模式之原型模式
- Oracle的reman命令
- linux的users命令,linux users命令详解
- 无线通信中的IQ调制,BPSK调制,QPSK调制,16QAM调制的理解
- java 安卓 物联网_面向物联网的Android应用开发与实践
- CSS解读之box-sizing属性
- 终于有人把流量运营讲明白了
- 动手学深度学习——目标检测 SSD R-CNN Fast R-CNN Faster R-CNN Mask R-CNN
- matlab-colormap-contourf函数
- 解析json数据 (js , java)
- 基于SSM旅游纪念品购物网站(idea-javaweb-javaee-j2ee-springboot)订单管理-购物评价-会员管理-购物车实现
- ff14服务器信息1014,FF14服务器追加开放汇总信息-8月26日
- 中国男蓝的惊喜-最后六秒三分绝杀
- 中国增生性糖尿病性视网膜病的治疗方法市场趋势报告、技术动态创新及市场预测
- python视频截取
- CMOS 图像传感器——Color Filter Array
热门文章
- 互联网寒冬?软件测试行业饱和了?为何每年还会增加40万测试员?
- 华为HCNA乱学Round 9:VRRP
- Python期末考试题库
- boost之lexical_cast使用
- [TensorFlow深度学习深入]实战一·使用embedding_lookup模块对Word2Vec训练保存与简单使用
- 个人支付接口现状分析——如何选择一个靠谱的个人支付接口
- python爬取英雄联盟所有皮肤价格表_python 爬取英雄联盟皮肤并下载的示例
- Python基础(二)
- javascript使用小技巧
- 苹果手机有护眼模式吗_玩手机眼睛疼?你需要开启护眼模式~