首页 > 其他分享 >Golang字符串拼接性能测试

Golang字符串拼接性能测试

时间:2023-08-25 20:34:07浏览次数:144  
标签:++ testing Golang var 拼接 NUMBERS str 字符串 buf

package mytest

import (
	"bytes"
	"fmt"
	"strconv"
	"strings"
	"testing"
)

const NUMBERS = 10000

func BenchmarkStringSprintf(b *testing.B) {
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		var str string
		for j := 0; j < NUMBERS; j++ {
			str = fmt.Sprintf("%s%d", str, j)
		}
	}
	b.StopTimer()
}
func BenchmarkStringAdd(b *testing.B) {
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		var str string
		for j := 0; j < NUMBERS; j++ {
			str = str + strconv.Itoa(j)
		}
	}
	b.StopTimer()
}

func BenchmarkStringStringBuilder(b *testing.B) {
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		var str string
		var builder strings.Builder
		for j := 0; j < NUMBERS; j++ {
			builder.WriteString(strconv.Itoa(j))
			builder.WriteString(str)
		}
		_ = builder.String()
	}
	b.StopTimer()
}

func BenchmarkStringbuffer(b *testing.B) {
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		var str string
		var buf bytes.Buffer
		for j := 0; j < NUMBERS; j++ {
			buf.WriteString(strconv.Itoa(j))
			buf.WriteString(str)
		}
		_ = buf.String()
	}
	b.StopTimer()
}

func BenchmarkStringBytes(b *testing.B) {
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		var str string
		buf := make([]byte, 0, NUMBERS*len(str))
		for i := 0; i < NUMBERS; i++ {
			buf = append(buf, str...)
		}
		_ = string(buf)
	}
	b.StopTimer()
}
测试

Golang字符串拼接性能测试_i++

总结

strings.Builderbytes.Buffer 和 []byte 的性能差距不大,而且消耗的内存也十分接近,性能最好且消耗内存最小的是 preByteConcat,这种方式预分配了内存,在字符串拼接的过程中,不需要进行字符串的拷贝,也不需要分配新的内存,因此性能最好,且内存消耗最小。综合易用性和性能,一般推荐使用 strings.Builder 来拼接字符串。


标签:++,testing,Golang,var,拼接,NUMBERS,str,字符串,buf
From: https://blog.51cto.com/u_14218719/7234620

相关文章

  • 逆置字符串允许有空格和. 如I like China.->China. like I
    voidreverse(char*left,char*right){ while(left<right) { inttmp=*left; *left=*right; *right=tmp; left++; right--; }}intmain(){ chararr[101]={0}; gets_s(arr); intlen=strlen(arr);//求字符串长度 //逆置整个字符串 reverse(......
  • 剑指 Offer 46. 把数字翻译成字符串(中等)
    题目:classSolution{//本题只需要返回不同翻译方法的数量,不需要列出所有翻译结果,所以可以采用以下递归方法public:inttranslateNum(intnum){if(num<10)return1;//当num小于10,说明找到一种翻译方法return(num%100<10||num%100>......
  • 【lc】415 字符串相加
    链接https://leetcode.cn/problems/add-strings/description/分析大数相加而已,倒着遍历,然后相加就好了。代码classSolution:defaddStrings(self,num1:str,num2:str)->str:num1,num2=(num1,num2)iflen(num1)>len(num2)else(num2,num1)......
  • cmake中list,set的对字符串操作
    cmake中所有的对象都是string,所以我们对这些的操作就是对字符串的操作,里面提供追加和删除的方法 CMakeLists.txtcmake_minimum_required(VERSION3.15)project(test)#方式二file(GLOBSRC${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)message("=========================")m......
  • js不区分大小写比较字符串|字符串转小写
    toLowerCase()方法用于把字符串转换为小写,在做字符串比较不区分大小写的时候用此方法,效果:代码://不区分大小写Stringstr=‘ABC’if(‘abc’==str.toLowerCase()){return“1”;//正确}else{return“0”;//错误}}toUpperCase():字符串转大写,比较同上......
  • VisionPro 多图像拼接简单操作
    应用场景:比如在一个视觉项目应用中,由于FOV过大,单相机像素精度不能满足预期,那么就需要分开布局多个相机拍摄。但是如果涉及到测量,定位,计数等类似应用的时候,图像拼接技术则显的非常重要。这里模拟四台相机分别拍摄一组二维码图像,然后将四张图拼接成为一张图,最后实现读码的功......
  • LeetCode-24. 两两交换链表中的节点(Golang)
    一、前言作者:bug菌博客:CSDN、掘金、infoQ、51CTO等简介:CSDN/阿里云/华为云/51CTO博客专家,博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者,全网粉丝合计10w+,硬核微信公众号「猿圈奇妙屋」,免费领取简历模板/学习资料/大厂面试真题/职业规划......
  • golang之增加版本信息功能
    在实际开发中,当开发完一个apiserver特性后,会编译apiserver二进制文件并发布到生产环境,很多时候为了定位问题和出于安全目的(不能发错版本),我们需要知道当前apiserver的版本,以及一些编译时候的信息,如编译时Go的版本、Git目录是否clean,以及基于哪个gitcommmit来编译的。......
  • Leetcode——1957、删除字符使字符串变好
    一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 。给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 。请你返回删除后的字符串。题目数据保证答案总是 唯一的 。 示例1:输入:s="leeetcode"输出:"leetcode"解释:从第一组'......
  • golang init函数、defer函数、匿名函数、错误处理
    1.init每一个源文件都可以包含一个init函数,该函数会在main函数执行前,被Go运行框架调用,也就是说init会在main函数前被调用,当有全局变量跟main函数init函数同时出现的时候执行的顺序是全局函数==》init函数==》main函数packagemainimport"fmt"functest()string{ r......