赞
踩
基准测试是一种测试代码性能的方法, 同时也可以用来识别某段代码的CPU或者内存效率问题. 许多开发人员会用基准测试来测试不同的并发模式, 或者用基准测试来辅助配置工作池的数量, 以保证能最大化系统的吞吐量.
和单元测试的文件名一样, 基准测试的文件名也必须以“_test.go”结尾. 另外, 基准测试函数必须以Benchmark开头, 接受一个指向testing.B类型的指针作为唯一参数.
题目:比较Golang标准库里3种将整数转为字符串的性能。
- package benchmark_test
-
- import (
- "fmt"
- "strconv"
- "testing"
- )
-
- func BenchmarkSprintf(b *testing.B) {
- b.ResetTimer()
- number := int64(10)
- for i := 0; i < b.N; i++ {
- fmt.Sprintf("%d", number)
- }
- }
-
- func BenchmarkItoa(b *testing.B) {
- b.ResetTimer()
- number := 10
- for i := 0; i < b.N; i++ {
- strconv.Itoa(number)
- }
- }
-
- func BenchmarkFormat(b *testing.B) {
- b.ResetTimer()
- number := int64(10)
- for i := 0; i < b.N; i++ {
- strconv.FormatInt(number, 10)
- }
- }

运行结果:
从运行结果看, sprintf执行了5kw次, 平均一次要105ns; itoa执行了10亿次, 平均一次要5.64ns, formatInt执行了20亿次, 平均每次要3.73ns.
参数介绍:
-bench=. 表示希望运行所有的基准测试函数, 也可以指定基准测试名字, 如-bench="BenchmarkFormat", 并且支持表达式;
-benchtime="3s" 表示每个基准测试函数持续3s;
-benchmem提供每次操作分配内存的次数(如2 allocs/op), 以及每次操作分配的字节数(16B/op).
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。