go 中的性能基準(zhǔn)測(cè)試衡量函數(shù)效率,通過在以 benchmark 開頭的函數(shù)中編寫基準(zhǔn)測(cè)試代碼實(shí)現(xiàn)。testing.b 類型提供 resettimer()、stoptimer() 和 n 屬性控制基準(zhǔn)測(cè)試行為。例如,計(jì)算斐波那契數(shù)的函數(shù)基準(zhǔn)測(cè)試表明執(zhí)行 fib(30) 需要約 2,767,425 納秒。優(yōu)化基準(zhǔn)測(cè)試代碼以避免開銷,多次運(yùn)行以獲得準(zhǔn)確結(jié)果。
Go 函數(shù)測(cè)試中的性能基準(zhǔn)測(cè)試
性能基準(zhǔn)測(cè)試是衡量函數(shù)效率的重要工具。在 Go 中,testing
包提供了針對(duì)函數(shù)執(zhí)行時(shí)間的基準(zhǔn)測(cè)試功能。
編寫性能基準(zhǔn)測(cè)試
編寫一個(gè)性能基準(zhǔn)測(cè)試需要?jiǎng)?chuàng)建一個(gè)以 Benchmark
開頭的函數(shù),后面跟上要測(cè)試的函數(shù)名:
func BenchmarkFib(b *testing.B) { // 基準(zhǔn)測(cè)試代碼 }
登錄后復(fù)制
使用 testing.B
testing.B
類型提供以下方法來控制基準(zhǔn)測(cè)試:
ResetTimer()
: 重置計(jì)時(shí)器。StopTimer()
: 停止計(jì)時(shí)器并記錄時(shí)間。N
: 執(zhí)行基準(zhǔn)測(cè)試的次數(shù)。
實(shí)戰(zhàn)案例
讓我們對(duì)一個(gè)計(jì)算斐波那契數(shù)的函數(shù)進(jìn)行基準(zhǔn)測(cè)試:
func Fib(n int) int { if n <= 1 { return n } return Fib(n-1) + Fib(n-2) } func BenchmarkFib(b *testing.B) { for i := 0; i < b.N; i++ { Fib(30) } }
登錄后復(fù)制
在終端中運(yùn)行測(cè)試:
go test -bench=.
登錄后復(fù)制
輸出將如下所示:
BenchmarkFib 2767425 ns/op
登錄后復(fù)制
這意味著用 30 作為參數(shù)執(zhí)行 Fib
函數(shù)的基準(zhǔn)測(cè)試需要大約 2,767,425 納秒(2767 毫秒)。
提示
使用 -benchmem
標(biāo)志來測(cè)量基準(zhǔn)測(cè)試的內(nèi)存分配。
優(yōu)化基準(zhǔn)測(cè)試代碼以避免開銷,例如創(chuàng)建不必要的變量。
多次運(yùn)行基準(zhǔn)測(cè)試以獲得更準(zhǔn)確的結(jié)果。