文档章节

go 性能相关总结

solate
 solate
发布于 2016/11/24 14:26
字数 328
阅读 37
收藏 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
博文 118
码字总数 97927
作品 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
2018/05/30
0
0
MySQL · myrocks · myrocks监控信息

rocksdb本身提供了丰富的监控信息,myrocks通过information_schema下的表和show命令等将这些信息展示出来,下面主要以示例的形式来简单介绍下 先创建测试表 SHOW STATUS show status 也展示了...

阿里云RDS-数据库内核组
2017/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS 选择器参考手册

CSS 选择器参考手册 选择器 描述 [attribute] 用于选取带有指定属性的元素。 [attribute=value] 用于选取带有指定属性和值的元素。 [attribute~=value] 用于选取属性值中包含指定词汇的元素。...

Jack088
今天
1
0
数据库篇一

数据库篇 第1章 数据库介绍 1.1 数据库概述  什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据...

stars永恒
今天
2
0
Intellij IDEA中设置了jsp页面,但是在访问页面时却提示404

在Intellij IDEA中设置了spring boot的jsp页面,但是在访问时,却出现404,Not Found,经过查找资料后解决,步骤如下: 在Run/Debug Configurations面板中设置该程序的Working Directory选项...

uknow8692
昨天
3
0
day24:文档第五行增内容|每月1号压缩/etc/目录|过滤文本重复次数多的10个单词|人员分组|

1、在文本文档1.txt里第五行下面增加如下内容;两个方法; # This is a test file.# Test insert line into this file. 分析:给文档后增加内容,可以用sed 来搞定;也可以用while do done...

芬野de博客
昨天
3
0
深入理解JVM—JVM内存模型

深入理解JVM—JVM内存模型 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存...

onedotdot
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部