zoukankan      html  css  js  c++  java
  • 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.go

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

      然后执行:

    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 这个安装盒子

      

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

      

    上面分析得出map 访问占用的性能比较高,可以换个用 slice 处理

  • 相关阅读:
    Notes | 基于医疗知识图谱的问答系统实践
    Notes | 知识图谱介绍与Neo4J实战
    从jvm源码看synchronized
    Kakfa基础
    volatile
    JVM垃圾收集器
    原码,反码,补码
    mini设计模式
    xshell提示采购解决方法
    应试必备算法
  • 原文地址:https://www.cnblogs.com/jackluo/p/10719229.html
Copyright © 2011-2022 走看看