首页 > 后端开发 > Golang > 正文

Golang基准测试内存使用量统计示例

P粉602998670
发布: 2025-09-15 14:19:01
原创
367人浏览过
基准测试可统计内存分配,通过b.ReportAllocs()记录每次操作的内存分配次数和字节数,结合ResetTimer确保数据准确。

golang基准测试内存使用量统计示例

Go语言的基准测试不仅能测量函数执行时间,还能统计内存分配情况。通过

testing.B
登录后复制
提供的方法,可以获取每次操作的内存分配次数和字节数,帮助优化性能关键代码。

编写基础基准测试

以一个简单的字符串拼接函数为例,展示如何启用内存统计:

// example.go
package main

func ConcatStrings(strs []string) string {
    var result string
    for _, s := range strs {
        result += s
    }
    return result
}
// example_test.go
package main

import (
    "math/rand"
    "strings"
    "testing"
)

func BenchmarkConcatStrings(b *testing.B) {
    inputs := make([]string, 100)
    for i := range inputs {
        inputs[i] = randomString(10)
    }

    b.ResetTimer()
    for i := 0; i         ConcatStrings(inputs)
    }
}

func randomString(n int) string {
    const letters = "abcdefghijklmnopqrstuvwxyz"
    sb := strings.Builder{}
    sb.Grow(n)
    for i := 0; i         sb.WriteByte(letters[rand.Intn(len(letters))])
    }
    return sb.String()
}

启用内存统计输出

运行基准测试时添加

-benchmem
登录后复制
标志,显示内存分配数据:

go test -bench=BenchmarkConcatStrings -benchmem

输出示例:

立即学习go语言免费学习笔记(深入)”;

BenchmarkConcatStrings-8     1000000       1250 ns/op     9600 B/op     99 allocs/op

其中:

Otter.ai
Otter.ai

一个自动的会议记录和笔记工具,会议内容生成和实时转录

Otter.ai 91
查看详情 Otter.ai
  • B/op:每次操作分配的字节数
  • allocs/op:每次操作的内存分配次数

对比优化方案

使用

strings.Builder
登录后复制
改进拼接逻辑:

func ConcatWithBuilder(strs []string) string {
    var sb strings.Builder
    sb.Grow(1000) // 预分配容量减少重新分配
    for _, s := range strs {
        sb.WriteString(s)
    }
    return sb.String()
}

添加对应基准测试:

func BenchmarkConcatWithBuilder(b *testing.B) {
    inputs := make([]string, 100)
    for i := range inputs {
        inputs[i] = randomString(10)
    }

    b.ResetTimer()
    for i := 0; i         ConcatWithBuilder(inputs)
    }
}

运行对比:

BenchmarkConcatStrings-8     1000000       1250 ns/op     9600 B/op     99 allocs/op
BenchmarkConcatWithBuilder-8  5000000        300 ns/op      1200 B/op      2 allocs/op

结果显示,使用

Builder
登录后复制
后内存分配量和次数显著降低,执行速度也更快。

基本上就这些。通过

-benchmem
登录后复制
标记和合理的基准测试设计,能清晰看到不同实现的内存开销差异,指导性能优化方向。

以上就是Golang基准测试内存使用量统计示例的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号