Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Golang基准测试内存使用量统计示例_创想鸟

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

基准测试可统计内存分配,通过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

其中:

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基准测试内存使用量统计示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1406283.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Golang在容器化部署中的实践方法
上一篇 2025年12月15日 22:07:26
Golang使用os包进行文件操作技巧
下一篇 2025年12月15日 22:07:35

相关推荐

发表回复

登录后才能评论
关注微信