zoukankan      html  css  js  c++  java
  • go 测试代码性能实例

     测试用例

    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

  • 相关阅读:
    Ueditor使用以及遇到的问题
    自己写一个分页PageHelper
    C#_IO操作_查询指定文件夹下的每个子文件夹占空间的大小
    C#发邮件_EmailHelper
    位运算反(~)与(&)异或(^)或(|)右移(>>)左移(<<)
    shell命令快捷键
    Openstack Day1简介及虚拟环境搭建
    VirtualBox双网卡搭建Linux虚拟实验环境
    git 学习笔记
    python socket 网络编程
  • 原文地址:https://www.cnblogs.com/kevin-yang123/p/14832608.html
Copyright © 2011-2022 走看看