gpt4 book ai didi

go - 如何使用标准库测试 Go 函数执行时间

转载 作者:IT王子 更新时间:2023-10-29 00:36:09 26 4
gpt4 key购买 nike

我已经编写了以下函数,当与 Defer 一起使用时肯定会达到目的,但是标准库中是否有我可以用于此目的的东西?我正在寻找类似于 Python timeit 的东西,我可以直接从 shell 中使用它?

package main

import (
"fmt"
"time"
)

func main() {
defer timeTrack(time.Now(), "looptest")
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var m []int
for n := range nums {
if n%2 == 0 {
m = append(m, n)
}
}
}

func timeTrack(start time.Time, name string) {
elapsed := time.Since(start)
fmt.Printf("%s took %s", name, elapsed)
}

最佳答案

使用 Go testing包裹。例如,

main.go:

package main

func doStuff() {
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var m []int
for n := range nums {
if n%2 == 0 {
m = append(m, n)
}
}
}

func main() {
doStuff()
}

main_test.go:

package main

import "testing"

func BenchmarkStuff(b *testing.B) {
for i := 0; i < b.N; i++ {
doStuff()
}
}

输出:

$ go test -bench=. -benchmem
goos: linux
goarch: amd64
pkg: main
BenchmarkStuff-4 5000000 276 ns/op 120 B/op 4 allocs/op

使用基准测试中的信息,您可以提高性能。通过使用估计来初始化 slice m 来减少分配的数量和大小。

func doStuff() {
nums := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
m := make([]int, 0, len(nums)/2+1)
for n := range nums {
if n%2 == 0 {
m = append(m, n)
}
}
}

输出:

$ go test -bench=. -benchmem
goos: linux
goarch: amd64
pkg: main
BenchmarkStuff-4 20000000 83.1 ns/op 48 B/op 1 allocs/op

关于go - 如何使用标准库测试 Go 函数执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49220450/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com