golang 使用pprof進行性能調優

 

package main

import "fmt"

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("123123"))
}

  隨便寫一個名字叫nonrepeat.go的文件,而後再寫了一個nonrepeat_test.gophp

package main

import "testing"

func BenchmarkLengthOfNonRepeatingSubStr(b *testing.B) {
	for i := 0; i < b.N; i++ {
		if lengthOfNonRepeatingSubStr("123123") != 3 {
			b.Errorf("正確的值是:%d",3)
		}
	}
}

  而後執行:web

go test -bench .  -cpuprofile cpu.out
goos: darwin
goarch: amd64
pkg: gopcp.v2/chapter7/nonrepeat
BenchmarkLengthOfNonRepeatingSubStr-4           10000000               225 ns/op
PASS
ok      gopcp.v2/chapter7/nonrepeat     2.646s

  

 nonrepeat go tool pprof cpu.out 
Type: cpu
Time: Apr 16, 2019 at 6:53pm (CST)
Duration: 2.64s, Total samples = 2.28s (86.48%)
Entering interactive mode (type "help" for commands, "o" for options)
(pprof) 

  mac 上面還須要安裝圖形化的界面工具 https://www.macports.org/install.php ,實在不行參考 https://blog.csdn.net/qq_36847641/article/details/78224910 這個安裝盒子bash

  

(pprof) web
Failed to execute dot. Is Graphviz installed? Error: exec: "dot": executable file not found in $PATH
(pprof) 

  

上面分析得出map 訪問佔用的性能比較高,能夠換個用 slice 處理工具

相關文章
相關標籤/搜索