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

  • 相关阅读:
    Jmeter-分布式
    Jmeter 重要测试指标释义
    Jmeter-12-如何使用Plugin Manager
    Jmeter-Java heap内存溢出
    Centos 6 FTP 配置
    Jmeter-8-FTP测试
    数据库介绍与分类
    WCP源码分析 与SpringMVC学习资料
    mvc 各种返回值
    JavaWeb工程 目录结构
  • 原文地址:https://www.cnblogs.com/kevin-yang123/p/14832608.html
Copyright © 2011-2022 走看看