基准测试就是在一定的工作负载之下检测程序性能的一种方法。基准测试的基本格式如下:
func BenchmarkName(b *testing.B){
// ...
}
测试函数
package split
import "strings"
func Split(s, seq string) (result []string) {
i := strings.Index(s, seq)
for i>-1 {
result = append(result, s[:i])
s = s[i+len(seq):]
//s = s[i+1:]
i = strings.Index(s, seq)
}
result = append(result, s)
return result
}
func SplitPlus(s,seq string) (result []string){
//分配一个容量大于两者最大容量+1
//使用make函数提前分配内存的改动,减少了2/3的内存分配次数,并且减少了一半的内存分配
result = make([]string, 0, strings.Count(s, seq)+1)
i := strings.Index(s, seq)
for i>-1 {
result = append(result, s[:i])
s = s[i+len(seq):]
i = strings.Index(s, seq)
}
result = append(result, s)
return result
}
测试bench
package split
import (
"reflect"
"testing"
)
func BenchmarkSplit(b *testing.B) {
for i:=0;i<b.N;i++ {
Split("a:b:c",":")
}
}
func BenchmarkSplitPlus(b *testing.B) {
for i := 0; i < b.N; i++ {
SplitPlus("a:b:c",":")
}
}
测试Split函数
go test -bench=Split
测试Split函数内存消耗和分配情况
go test -bench=Split -benchmem
测试SplitPlus函数
go test -bench=SplitPlus
测试SplitPlus函数内存消耗和分配情况
go test -bench=SplitPlus -benchmem