首页 > 其他分享 >String 和 StringBuilder的区别与性能

String 和 StringBuilder的区别与性能

时间:2023-05-25 10:44:32浏览次数:50  
标签:String StringBuilder 性能 字串 str2 str1 Append string

stringStringBuilder 都可以用在串联字符串上,但是其性能在不同的场景下会有很大的差别。

1、 使用string +场景: 多个字串通过 +来进行连接,如下所示,此时都在一条语句里面,因此内部会通过 StringBuilder对象来完成对应的连接,此时推荐使用 string +来连接字串

string s1 ,s2 ,s3 ,s4 ,s5;

string str1 = s1 + s2 + s3 + s4 + s5;

StringBuilder str2 = new StringBuilder();
str2.Append(s1);
str2.Append(s2);
str2.Append(s3);
str2.Append(s4);
str2.Append(s5);

2、 使用StringBuilder 场景:多个字串串联分成多条语句,或循环里连接字串,如下所示。此时使用 StringBuilder性能更优

string s1, s2, s3, s4, s5;
// 多个字串通过多条语句来进行串联
string str1 = string.Empty;
str1 += s1;
str1 += s2;
str1 += s3;
str1 += s4;
str1 += s5;

StringBuilder str2 = new StringBuilder();
str2.Append(s1);
str2.Append(s2);
str2.Append(s3);
str2.Append(s4);
str2.Append(s5);

// 循环内部进行串联字串
for(int i=0;i<10000;i++)
{
    str1 += i;
}

for(int i=0;i<10000;i++)
{
    strBuild.Append(i.ToString());
}

通过串接多个字串来比对StringBuilderstring的性能

Stopwatch sw01 = new Stopwatch();

string str1 = String.Empty;
sw01.Start();
for(int i=0;i<100000;i++)
{
    str1 += i;
}
sw01.Stop();

Console.WriteLine("String time = " + sw01.ElapsedMilliseconds);


Stopwatch sw02 = new Stopwatch();
StringBuilder strBuild = new StringBuilder();
sw02.Start();
for(int i=0;i<100000;i++)
{
    strBuild.Append(i);
}
sw02.Stop();
Console.WriteLine("StringBuilder time = " + sw02.ElapsedMilliseconds);

【总结】

  1. string 是不可修改的,而 StringBuilder 是可修改的。
  2. 多个字串在一条语句中进行串联时,使用 string;通过多条语句进行串联或在循环中进行串联时,使用StringBuilder
  3. string位于 System 的命名空间下,StringBuilder位于 System.Text命名空间下

参考资料:Use Visual C# to improve string concatenation performance

标签:String,StringBuilder,性能,字串,str2,str1,Append,string
From: https://www.cnblogs.com/Jeffxu/p/17430470.html

相关文章

  • java 通过String关键词 和 String对象创建字符串 耗时对比
    importjava.util.ArrayList;importjava.util.Vector;publicclassImoocStudent{publicstaticvoidmain(Stringargs[]){longstartTime=System.currentTimeMillis();for(inti=0;i<5000000;i++){Strings1="he......
  • Oceans on a Shoestring: Shape Representation, Meshing and Shading(低成本的海洋:形
    作者:HuwBowles单位:StudioGoboIntroduction(简介):StudioGoboisasmallteamoftalenteddevelopersbasedinBrighton/UKTheCrew(成员):BenAndrews,PaulAyliffe,AnastasiosBrakis,JimCallin,ClementDagneauKevinHayes,WillMyles,OlliverReid-Smith,Phi......
  • 【异常】Failed to bind properties under ‘logging.level‘ to java.util.Map<java.l
    本文目录一、背景描述二、问题原因原因1:缺少层级原因2:标点符号使用错误三、解决方案方案一:针对原因1方案二:针对原因2一、背景描述项目技术:springboot2.1.5.RELEASE+logback1.2.3项目启动报错:org.springframework.boot.context.properties.bind.BindException:Failedtobindp......
  • StringTokenizer 分隔符
    Java中我们可以使用StringTokennizer设置不同分隔符来分隔字符串,默认的分隔符是:空格、制表符(\t)、换行符(\n)、回车符(\r)。以下实例演示了StringTokennizer使用空格和等号来分隔字符串:importjava.util.StringTokenizer;publicclassImoocStudent{publicstaticvoi......
  • BenchmarkDotNet 概述--性能测试
    BenchmarkDotNet概述BenchmarkDotNethelpsyoutotransformmethodsintobenchmarks,tracktheirperformance,andsharereproduciblemeasurementexperiments.It'snoharderthanwritingunittests提取几个关键字(其实是只认识那几个英文单词)将方法转换基准测......
  • 在java中String类为什么要设计成final?Java面试常见问题
    其实在Java中,String类被final修饰,主要是为了保证字符串的不可变性,进而保证了它的安全性。那么final到底是怎么保证字符串安全性的呢?接下来就让我们一起来看看吧。一. final的作用1. final关键词修饰的类不可以被其他类继承,但是该类本身可以继承其他类,通俗地说就是这个类可以......
  • 【Java用法】Boolean.parseBoolean(string);
    String类型转boolean类型的一个方法当String的值为“true”时返回true,(此处true值是忽略大小写的)当为其他字符串时返回false。参考文档:Jdk1.8 中文版方法详细信息parseBooleanpublicstaticbooleanparseBoolean(Strings)将字符串参数解析为布尔值。boolean返回的代表值为true......
  • WPF 使用Background="Transparent"+AllowsTransparency="True"实现穿透效果,窗体多次渲
    如果在WPF中的窗体使用AllowsTransparency="True"实现穿透效果,那么该窗体如果移动、快速渲染、控件比较多的情况,会出现卡顿,CPU暴涨的问题。基于以上情况,可以使用另一种方式实现,由@wuty@terryK指导:usingSystem.Windows;usingAnnotation.Business;namespaceDemo{//......
  • 常见性能指标
    1、性能指标分类系统性能指标资源性能指标中间件指标数据库指标稳定性指标可扩展性指标可靠性指标2、系统性能指标响应时间系统处理能力吞吐量并发用户数错误率2.1响应时间ResponseTime简称RT,是指系统对请求作出响应的时间(处理请求的时间);不同的功能的响应时间也不尽相同,所......
  • Python文件读写、StringIO和BytesIO
    StringIO和BytesIO很多时候,数据读写不一定是文件,也可以在内存中读写。StringIO就是在内存中读写str。要把str写入StringIO,我们需要先创建一个StringIO,然后,像文件一样写入即可:>>>fromioimportStringIO>>>f=StringIO()>>>f.write('hello')5>>>f.write('')......