首页 > 其他 > 详细

go 测试代码性能实例

时间:2021-05-31 21:42:52      阅读:16      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 测试用例

test.go

package test

// MakeSliceWithPreAlloc 不预分配
func MakeSliceWithoutAlloc() []int {
    var newSlice []int

    for i := 0; i < 100000; i++ {
        newSlice = append(newSlice, i)
    }

    return newSlice
}

// MakeSliceWithPreAlloc 通过预分配Slice的存储空间构造
func MakeSliceWithPreAlloc() []int {
    var newSlice []int

    newSlice = make([]int, 0, 100000)
    for i := 0; i < 100000; i++ {
        newSlice = append(newSlice, i)
    }

    return newSlice
}

test_test.go

package test_test
import (
    "test/test"
    "testing"
)

func BenchmarkMakeSliceWithoutAlloc(b *testing.B) {
    for i := 0; i < b.N; i++ {
        test.MakeSliceWithoutAlloc()
    }
}

func BenchmarkMakeSliceWithPreAlloc(b *testing.B) {
    for i := 0; i < b.N; i++ {
        test.MakeSliceWithPreAlloc()
    }
}

测试结果

 技术分享图片

 

 

其中-bench为go test的flag,该flag指示go test进行性能测试,即执行测试文件中符合”BenchmarkXxx”规则的方法。
紧跟flag的为flag的参数,本例表示执行当前所有的性能测试。

通过输出可以直观的看出,BenchmarkMakeSliceWithoutAlloc执行了2000次,平均每次526064纳秒,BenchmarkMakeSliceWithPreAlloc执行了9000次,平均每次119788纳秒。

从测试结果上看,虽然构造切片很快,但通过给切片预分配内存,性能还可以进一步提升,符合预期。关于原理分析,请参考Slice相关章节。

 

 参考:性能测试 http://www.topgoer.cn/docs/gozhuanjia/chapter077.1.2-benchmark_test

 

go 测试代码性能实例

原文:https://www.cnblogs.com/kevin-yang123/p/14832608.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!