文档章节

go 性能相关总结

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

码上生花,ECharts 作品展示赛正式启动!>>>

性能测试基本概念

基本概念

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
粉丝 10
博文 138
码字总数 122681
作品 0
成都
程序员
私信 提问
加载中
请先登录后再评论。
LoadRunner(二)——性能测试过程概述

参考学习感谢:《精通软件性能测试与LoadRunner实战》 性能测试过程概述 2.1 性能测试的基本过程 2.2 性能测试需求分析 2.3 性能测试计划 2.4 性能测试用例 2.5 测试脚本编写 2.6 测试场景设...

osc_u949m2a6
2019/04/19
1
0
我的第三本书>

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

fish_yy
2013/05/28
0
0
dotnet core各rpc组件的性能测试

一般通讯组件都具有高性特性,因为大部分都是基于二进制和连接复用的特点,相对于(2.0以下的版本)来说有着很大的性能优势,非常适合服务间通讯交互。本文针对了dotnet core平台上的一些组件进...

osc_6nds72mv
2019/09/03
2
0
性能测试综述

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

不最醉不龟归
2016/11/12
56
1
【JMeter性能测试】之学习资料总结(持续更新)

本人测试小白,总结一下JMeter性能测试相关文档进行转载学习,下面会贴出原文作者以示感谢: JMeter性能测试学习地址:http://www.ltesting.net/ceshi/open/kyxncsgj/jmeter/ 个人总结JMete...

osc_039ggp1i
2018/04/23
39
0

没有更多内容

加载失败,请刷新页面

加载更多

mybatis之foreach用法

在做mybatis的mapper.xml文件的时候,我们时常用到这样的情况:动态生成sql语句的查询条件,这个时候我们就可以用mybatis的foreach了 foreach元素的属性主要有item,index,collection,ope...

osc_0hs26yvj
31分钟前
3
0
css笔记整理

0索引 1html标签块 2选择器 3CSS的引入方式: 4CSS浮动 :流式布局 5盒子模型 6案例一网站首页 7案例二网站注册页面 1html标签块 div标签:默认占- -行,自动换行 span标签:内容显示在同- -行 <!...

osc_3grma05a
32分钟前
5
0
js获取图片的EXIF,解决图片旋转问题

相信大家在做项目的时候会遇到在canvas里加入图片时,图片发生90°,180°的旋转。当时的你肯定时懵逼的,为毛。 其实这就是图片的EXIF搞的鬼。 什么是EXIF 简单来说,Exif 信息就是由数码相...

osc_ytmgp8ea
33分钟前
6
0
StringUtils.isEmpty()和isBlank()的区别

一、概述 两种判断字符串是否为空的用法都是在程序开发时常用的,相信不少同学在这种简单的问题上也吃过亏,到底有什么区别,使用有什么讲究,带着问题往下看。 二、jar包 commons-lang3-3....

osc_1mofhvr6
35分钟前
11
0
H5嵌入钉钉

1,需要在项目种引入钉钉官方的js <script type="text/javascript" src="http://g.alicdn.com/dingding/dingtalk-jsapi/2.3.0/dingtalk.open.js" ></script> 或者npm 也可以的 2,钉钉......

osc_ucqb2u3q
36分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部