goland性能测试 求出代码性能

golang 代码测试与性能分析

平时我写一些方法,需要测试,一般是在main函数上测试,这样很不友好,goland为我准备了测试用的包 test ,下面是个列子

1.1列子

demo

func lengthOfNonRepeatingSubStr(s string) int {
	lastOccurred := make(map[rune]int)
	start := 0
	maxLength := 0

	for i, ch := range []rune(s) {
		if lastI, ok := lastOccurred[ch]; ok && lastI >= start {
			start = lastI + 1
		}
		if i-start+1 > maxLength {
			maxLength = i - start + 1
		}
		lastOccurred[ch] = i
	}

	return maxLength
}

func main() {
	fmt.Println(
		lengthOfNonRepeatingSubStr("abcabssssdsdsfscbb"))
 
	fmt.Println(
		lengthOfNonRepeatingSubStr(
			"航天工业发展股份有限公司紧围绕"))
}

一 测试结果

表格测试

func BenchmarkSubstr(b *testing.B) {
	s := "航天工业发展股份有限公司紧围绕"
	for i := 0; i < 13; i++ {
		s = s + s
	}
	b.Logf("len(s) = %d", len(s))
	ans := 8
	b.ResetTimer()

	for i := 0; i < b.N; i++ {
		actual := lengthOfNonRepeatingSubStr(s)
		if actual != ans {
			b.Errorf("got %d for input %s; "+
				"expected %d",
				actual, s, ans)
		}
	}
}

IDE结果

BenchmarkSubstr
BenchmarkSubstr-4   	     129	   9068571 ns/op

b.ResetTimer()这段代码的意思是测试时,字符串拼接的时间不算在里面

如果你觉得代码写的不过好,可以吧上面的map改变成切片,但切片的创建最好是放在外面,这样可以减少垃圾回收的性能

var lastOccurred = make([]int,0xffff)
func lengthOfNonRepeatingSubStr2(s string) int {
	for i:=range lastOccurred{
		lastOccurred[i]=0
	}
	start := 0
	maxLength := 0

	for i, ch := range []rune(s) {
		if lastI:= lastOccurred[ch]; lastI > start {
			start = lastI
		}
		if i-start+1 > maxLength {
			maxLength = i - start + 1
		}
		lastOccurred[ch] = i+1
	}

	return maxLength
}

二生成代码性能PDF

命令
1 先使用命令 go test -bench . -cpuprofile cpu.out 输出文件cpu.out
2 再运行 go tool pprof cpu.out 安提示输入web

3 退出 quit

注:如无法输出,请先安装graphviz
graphviz官方网址 http://www.graphviz.org/download

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值