首页 > 解决方案 > golang如何知道算法消耗的速度和内存容量

问题描述

我有 2 个 golang 算法,它们使用 for 循环和递归。我怎么知道我的两种算法消耗的速度和内存容量?

func forLoop(a int){
    for i:=a; i>=0; i--{
        fmt.Println("ForLoop = ",i)
    }

}
func recursive(a int) int {
    if(a<=0){
        return 0
    }else{
        fmt.Println("Recursive = ",a)
        return recursive(a-1)
    }
}

标签: performancego

解决方案


首先,编写两个 Benchmark 测试函数,一个用于调用每个算法。
请参阅Marco Franssen的“在运行中测试和基准测试代码”中的示例。

// main_test.go
func BenchmarkLoop(b *testing.B) {
  for i := 0 ; i < b.N ; i++ {
    forLoop(100)
  }
}
func BenchmarkRecursive(b *testing.B) {
  for i := 0 ; i < b.N ; i++ {
    recursive(100)
  }
}

其次,安装VSCode 扩展 Go Profiling,您将能够直接从您的 IDE 启动 pprof:

https://raw.githubusercontent.com/MaxM65dia/vscode-go-prof/master/media/preview.gif

然后,您可以比较每个函数花费的时间。

注意:下一个版本的 vscode-go 将提供更好的 pprof 集成

vscode 去
(可能适用于 vscode-go 0.29:检查版本


推荐阅读