文档章节

go 性能相关总结

solate
 solate
发布于 2016/11/24 14:26
字数 328
阅读 35
收藏 0

性能测试基本概念

基本概念

Benchmark: 性能测试

ns/op: 纳秒/每个操作,前面数值越小越快

命令

  • go test -c
  • go test -test.bench=. -test.cpuprofile=cpu.prof
  • go tool pprof bench.test cpu.prof

示例

建立一个包,创建一个test文件如,文件名为lib_test.go

package lib

import (
	"testing"
	"fmt"
)

const (
	str = "hello gohpers!"
	sep = ","
)

func BenchmarkFmt(b *testing.B)  {
	for i := 0; i < b.N ; i++ {
		_ = fmt.Sprintf("%s%s%s%s%s", str, sep, str, sep, str)
	}
	
}

func BenchmarkPlus(b *testing.B)  {
	for i:=0; i < b.N; i++  {
		_ = str + sep + str + sep + str
	}
}


然后运行 go test -bench=. 后面这个参数"." 不能加引号

结果

// Benchmark 名字 - CPU            循环次数             平均每次执行时间 
BenchmarkFmt-4             	      3000000	             554 ns/op
BenchmarkPlus-4            	    2000000000	            0.36 ns/op

结论:  0.36 更快一点

一些优化小点

  1. 在for循环中, ++i要比i++快, for逐渐减小要比逐渐增加快

  2. 使用 "+" 比使用fmt.Sprintf() 快

  3. 使用 strconv 包转换 要比 fmt.Sprintf 快

  4. 使用 strings.Join() 比 "+" 快

  5. 使用string.Join() 比 bytes.Buffer() 快

  6. 指定cap的slice 比不指定的快,指定的cap的map比不指定的快。slice 要比使用map快。

string 和 []byte

  • 如果可以的话,尽量用多[]byte,少用string
  • 尽可能少地在两者之间做转换

后续继续补充

参考

Go 语言测试(Test)、性能测试(Benchmark) 学习笔记

PS: 觉得不错的请点个赞吧!! (ง •̀_•́)ง

© 著作权归作者所有

共有 人打赏支持
上一篇: go tcp 与 udp
solate
粉丝 7
博文 111
码字总数 87226
作品 0
成都
程序员
私信 提问
与IO相关的等待事件troubleshooting-系列9

Buffer Cache与IO相关的等待事件: 这种等待事件的产生原因是包含DBWR进程和IO Slaves的Buffer Cache操作。 'db file parallel write' , 'db file single write', 'write complete waits', '...

bisal
2013/10/12
0
0
我的第三本书>

关于本书 作者前两本书《软件性能测试与LoadRunner实战》和《精通软件性能测试与LoadRunner实战》面市后,受到广大软件测试和开发人员的关注与好评,然而,在前两本书中讲述的性能测试工具以...

fish_yy
2013/05/28
0
0
性能测试综述

一、了解性能测试 性能测试是不断的通过不同场景的系统表现去探究系统设计与资源消耗之间的平衡。 我们可以认为性能测试是:通过在测试环境下对系统或构件的性能进行探测,用以验证在生产环境...

不最醉不龟归
2016/11/12
8
0
Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)

前言 在 开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性、流畅性、稳定性等,是提高用户留存率的关键 本文全面讲解性能优化中的所有知识,献上一份 性能优化的详细攻...

Carson_Ho
05/30
0
0
Nginx出现502和504错误解决方法

公司一台测试服务器,最近出现504和502问题:(环境LNMP,php编译安装,Fastcgi模式),问题不难解决,但这里分享一下自己的排查思路和处理问题的方式。 504 Gateway Time-out,nginx 502 bad g...

阚小看
2017/07/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

AI赋能一键自动检测:页面异常、控件异常、文本异常

摘要: 1.前言 闲鱼质量团队一直致力于交付高质量的app给用户,当前随着AI技术不断发展,TensorFlow大热,也给测试手段带来了更多种可能,本文接下来给大家介绍AI在闲鱼测试的一点实践:如何...

阿里云官方博客
27分钟前
1
0
Microsoft Remote Desktop For Mac

地址:https://rink.hockeyapp.net/apps/5e0c144289a51fca2d3bfa39ce7f2b06/ 解决国内App store不能下载的问题。

Cheuker
38分钟前
1
0
原地打印刷新(倒计时)

原地打印刷新(倒计时) 代码如下 from time import sleepfor i in reversed(range(1, 11)): print("\r倒计时:{}秒".format(i), end="") sleep(1)...

_Change_
51分钟前
1
0
php,vue,vue-ssr 做出来的页面有什么区别?

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由shirishiyue发表于云+社区专栏 目前我这边的web页面,都是采用php+smarty模板生成的,是一种比较早期的开发模式。好处是没...

腾讯云加社区
57分钟前
3
0
安卓的切图规范

Android UI 切图命名规范、标注规范及单位描述 很多UI设计师做APP切图都会有两套,一套是Android的,一套是IOS的。IOS我这边暂不作讲解,因为我本人也不是开发IOS。这里整理一下我在Android...

mo311
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部