StringBuilder String string.Concat 字符串拼接速度再议

首先看测试代码:

 1   public class StringSpeedTest
 2     {
 3         private readonly static string _testStr = "0123456789";
 4 
 5         public string StringAdd(int count)
 6         {
 7             string str = string.Empty;
 8             for (int i = 0; i < count; i++)
 9             {
10                 str += _testStr;
11             }
12             return str;
13         }
14 
15         public string UseStringBuilder(int count)
16         {
17             StringBuilder sb = new StringBuilder();
18 
19             for (int i = 0; i < count; i++)
20             {
21                 sb.Append(_testStr);
22             }
23 
24             return sb.ToString();
25         }
26         public string UseStringBuilderWithCapacity(int count)
27         {
28             StringBuilder sb = new StringBuilder(count * _testStr.Length);
29 
30             for (int i = 0; i < count; i++)
31             {
32                 sb.Append(_testStr);
33             }
34 
35             return sb.ToString();
36         }
37         public string UseStringConcat(int count)
38         {
39             string[] list = new string[count];
40             for (int i = 0; i < count; i++)
41             {
42                 list[i] = _testStr;
43             }
44             return string.Concat(list);
45         }
46         public string UseStringConcatWithList(int count)
47         {
48             List<string> list = new List<string>(count);
49             for (int i = 0; i < count; i++)
50             {
51                 list.Add(_testStr);
52             }
53             return string.Concat(list);
54         }
55         public string UseStringConcatWithListToArray(int count)
56         {
57             List<string> list = new List<string>(count);
58             for (int i = 0; i < count; i++)
59             {
60                 list.Add(_testStr);
61             }
62             return string.Concat(list.ToArray());
63         }
64     }
View Code
 1 Stopwatch watch = new Stopwatch();
 2             StringSpeedTest strSpeedTest = new StringSpeedTest();
 3 
 4             int count = 10000;
 5             TimeSpan time = new TimeSpan(0, 0, 0);
 6             watch.Start();
 7             for (int i = 0; i < 10; i++)
 8             {
 9                 Console.WriteLine("-------------------------------------------------------------------");
10                 strSpeedTest.StringAdd(count);
11 
12                 Console.WriteLine($"StringAdd:\t\t\t{watch.Elapsed - time}");
13                 time = watch.Elapsed;
14 
15                 strSpeedTest.UseStringBuilder(count);
16                 Console.WriteLine($"UseStringBuilder:\t\t{watch.Elapsed - time}");
17                 time = watch.Elapsed;
18 
19                 strSpeedTest.UseStringBuilderWithCapacity(count);
20                 Console.WriteLine($"UseStringBuilderWithCapacity:\t{watch.Elapsed - time}");
21                 time = watch.Elapsed;
22 
23                 strSpeedTest.UseStringConcatWithList(count);
24                 Console.WriteLine($"UseStringConcatWithList:\t{watch.Elapsed - time}");
25                 time = watch.Elapsed;
26 
27                 strSpeedTest.UseStringConcatWithListToArray(count);
28                 Console.WriteLine($"UseStringConcatWithListToArray:\t{watch.Elapsed - time}");
29                 time = watch.Elapsed;
30 
31                 strSpeedTest.UseStringConcat(count);
32                 Console.WriteLine($"UseStringConcat:\t\t{watch.Elapsed - time}");
33 
34 
35                 Console.WriteLine("*******************************************************************");
36             }
37 
38             watch.Stop();
View Code

测试结果:

 1 -------------------------------------------------------------------
 2 StringAdd:                      00:00:00.2908582
 3 UseStringBuilder:               00:00:00.0008419
 4 UseStringBuilderWithCapacity:   00:00:00.0008429
 5 UseStringConcatWithList:        00:00:00.0101701
 6 UseStringConcatWithListToArray: 00:00:00.0032169
 7 UseStringConcat:                00:00:00.0005971
 8 *******************************************************************
 9 -------------------------------------------------------------------
10 StringAdd:                      00:00:00.1373059
11 UseStringBuilder:               00:00:00.0003654
12 UseStringBuilderWithCapacity:   00:00:00.0003533
13 UseStringConcatWithList:        00:00:00.0006684
14 UseStringConcatWithListToArray: 00:00:00.0003922
15 UseStringConcat:                00:00:00.0003371
16 *******************************************************************
17 -------------------------------------------------------------------
18 StringAdd:                      00:00:00.1313924
19 UseStringBuilder:               00:00:00.0003778
20 UseStringBuilderWithCapacity:   00:00:00.0010882
21 UseStringConcatWithList:        00:00:00.0010397
22 UseStringConcatWithListToArray: 00:00:00.0007571
23 UseStringConcat:                00:00:00.0004528
24 *******************************************************************
25 -------------------------------------------------------------------
26 StringAdd:                      00:00:00.1282163
27 UseStringBuilder:               00:00:00.0003770
28 UseStringBuilderWithCapacity:   00:00:00.0003452
29 UseStringConcatWithList:        00:00:00.0006388
30 UseStringConcatWithListToArray: 00:00:00.0003873
31 UseStringConcat:                00:00:00.0004068
32 *******************************************************************
33 -------------------------------------------------------------------
34 StringAdd:                      00:00:00.1349978
35 UseStringBuilder:               00:00:00.0004084
36 UseStringBuilderWithCapacity:   00:00:00.0003698
37 UseStringConcatWithList:        00:00:00.0006802
38 UseStringConcatWithListToArray: 00:00:00.0004059
39 UseStringConcat:                00:00:00.0003503
40 *******************************************************************
41 -------------------------------------------------------------------
42 StringAdd:                      00:00:00.1290642
43 UseStringBuilder:               00:00:00.0003813
44 UseStringBuilderWithCapacity:   00:00:00.0003674
45 UseStringConcatWithList:        00:00:00.0006886
46 UseStringConcatWithListToArray: 00:00:00.0004115
47 UseStringConcat:                00:00:00.0003509
48 *******************************************************************
49 -------------------------------------------------------------------
50 StringAdd:                      00:00:00.1363654
51 UseStringBuilder:               00:00:00.0003885
52 UseStringBuilderWithCapacity:   00:00:00.0004270
53 UseStringConcatWithList:        00:00:00.0007209
54 UseStringConcatWithListToArray: 00:00:00.0004618
55 UseStringConcat:                00:00:00.0003863
56 *******************************************************************
57 -------------------------------------------------------------------
58 StringAdd:                      00:00:00.1326732
59 UseStringBuilder:               00:00:00.0003978
60 UseStringBuilderWithCapacity:   00:00:00.0003965
61 UseStringConcatWithList:        00:00:00.0006867
62 UseStringConcatWithListToArray: 00:00:00.0004012
63 UseStringConcat:                00:00:00.0003480
64 *******************************************************************
65 -------------------------------------------------------------------
66 StringAdd:                      00:00:00.1275684
67 UseStringBuilder:               00:00:00.0003673
68 UseStringBuilderWithCapacity:   00:00:00.0004190
69 UseStringConcatWithList:        00:00:00.0007201
70 UseStringConcatWithListToArray: 00:00:00.0004572
71 UseStringConcat:                00:00:00.0003848
72 *******************************************************************
73 -------------------------------------------------------------------
74 StringAdd:                      00:00:00.1606576
75 UseStringBuilder:               00:00:00.0004435
76 UseStringBuilderWithCapacity:   00:00:00.0005415
77 UseStringConcatWithList:        00:00:00.0007263
78 UseStringConcatWithListToArray: 00:00:00.0004205
79 UseStringConcat:                00:00:00.0003707
80 *******************************************************************
View Code

 从结果中可以看到,StringBuilder 速度不是永远最快的。当把cout调整为100000时 结果如下,由于string直接+速度太慢直接去除比较梯队。

 1 -------------------------------------------------------------------
 2 UseStringBuilder:               00:00:00.1400624
 3 UseStringBuilderWithCapacity:   00:00:00.0057860
 4 UseStringConcatWithList:        00:00:00.0186478
 5 UseStringConcatWithListToArray: 00:00:00.0074943
 6 UseStringConcat:                00:00:00.0054871
 7 *******************************************************************
 8 -------------------------------------------------------------------
 9 UseStringBuilder:               00:00:00.0115386
10 UseStringBuilderWithCapacity:   00:00:00.0057336
11 UseStringConcatWithList:        00:00:00.0080408
12 UseStringConcatWithListToArray: 00:00:00.0052401
13 UseStringConcat:                00:00:00.0037864
14 *******************************************************************
15 -------------------------------------------------------------------
16 UseStringBuilder:               00:00:00.0085633
17 UseStringBuilderWithCapacity:   00:00:00.0049141
18 UseStringConcatWithList:        00:00:00.0179742
19 UseStringConcatWithListToArray: 00:00:00.0045335
20 UseStringConcat:                00:00:00.0042053
21 *******************************************************************
22 -------------------------------------------------------------------
23 UseStringBuilder:               00:00:00.0085083
24 UseStringBuilderWithCapacity:   00:00:00.0041245
25 UseStringConcatWithList:        00:00:00.0080081
26 UseStringConcatWithListToArray: 00:00:00.0043282
27 UseStringConcat:                00:00:00.0037264
28 *******************************************************************
29 -------------------------------------------------------------------
30 UseStringBuilder:               00:00:00.0087733
31 UseStringBuilderWithCapacity:   00:00:00.0086311
32 UseStringConcatWithList:        00:00:00.0080520
33 UseStringConcatWithListToArray: 00:00:00.0056323
34 UseStringConcat:                00:00:00.0038094
35 *******************************************************************
36 -------------------------------------------------------------------
37 UseStringBuilder:               00:00:00.0086884
38 UseStringBuilderWithCapacity:   00:00:00.0063233
39 UseStringConcatWithList:        00:00:00.0081824
40 UseStringConcatWithListToArray: 00:00:00.0055393
41 UseStringConcat:                00:00:00.0040967
42 *******************************************************************
43 -------------------------------------------------------------------
44 UseStringBuilder:               00:00:00.0108527
45 UseStringBuilderWithCapacity:   00:00:00.0048482
46 UseStringConcatWithList:        00:00:00.0079176
47 UseStringConcatWithListToArray: 00:00:00.0043536
48 UseStringConcat:                00:00:00.0042921
49 *******************************************************************
50 -------------------------------------------------------------------
51 UseStringBuilder:               00:00:00.0119569
52 UseStringBuilderWithCapacity:   00:00:00.0043067
53 UseStringConcatWithList:        00:00:00.0091552
54 UseStringConcatWithListToArray: 00:00:00.0045956
55 UseStringConcat:                00:00:00.0041058
56 *******************************************************************
57 -------------------------------------------------------------------
58 UseStringBuilder:               00:00:00.0096342
59 UseStringBuilderWithCapacity:   00:00:00.0055840
60 UseStringConcatWithList:        00:00:00.0073000
61 UseStringConcatWithListToArray: 00:00:00.0056438
62 UseStringConcat:                00:00:00.0038800
63 *******************************************************************
64 -------------------------------------------------------------------
65 UseStringBuilder:               00:00:00.0090576
66 UseStringBuilderWithCapacity:   00:00:00.0047266
67 UseStringConcatWithList:        00:00:00.0076383
68 UseStringConcatWithListToArray: 00:00:00.0048706
69 UseStringConcat:                00:00:00.0048964
70 *******************************************************************
View Code

 从结果中可以看到再没有使用初始化StringBuilder 容器容量的时候,性能与使用string.Concat相差已经很大。在使用初始化容量之后 性能有较大的提升。

总结如下:

1、在只知道字符串最终长度的时候,可以使用 StringBuilder 并初始化容量,可以有较大的提升;

2、在不知道最终字符串长度时候,但是知道拼接字符串次数的时候,可以将每次字符串保存在一个字符串数组中,可以有较大的性能提升;

3、在不知道字符串长度以及拼接的次数的时候,可以使用LIst<string>  保存,可以有较大的性能提升。当然也可以大约估计最终字符串长度,然后初始化StringBuilder 时候使用较大的容量,以空间来换取速度

当然这些都是在拼接字符串的次数很大的情况下,会有较大的性能提升。

 

参考:

http://blog.zhaojie.me/2009/11/string-concat-perf-1-benchmark.html

转载于:https://www.cnblogs.com/gsjlovenet/p/7263178.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

特斯拉Autopilot事故频发,真正意义上自动驾驶还要多久问世?

这并不是特斯拉 Autopilot 首次发生事故致死案例。来源&#xff1a;未来汽车科技的新能源汽车更替传统汽车是时代趋势&#xff0c;作为业内先驱&#xff0c;身处聚光灯下的特斯拉不可避免会受到大众关注&#xff0c;例如涉及它的每一次交通安全事件从不会在媒体报道中缺席。据外…

BDD 与DSL 入门

正文&#xff1a; Behavior Driven Development&#xff0c;行为驱动开发是一种敏捷软件开发的技术&#xff0c;它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。在了解Behavior Driven Development之前&#xff0c;先介绍Test-Driven Development(TDD)即测试…

CICC科普栏目|颠覆认知!看完这些图,你的世界观还好吗?

本文系网易新闻网易号“各有态度”特色内容部分资料来源于网络转自&#xff1a;超级数学建模接下来&#xff0c;仔细看下面的图与文字你会非常震撼……每天&#xff0c;地球上都有这么多的人在飞来飞去&#xff0c;就像下图中一样。▼图中圈圈里头的人口&#xff0c;比其他地区…

RISC-V会彻底改变计算吗?

来源&#xff1a;内容由半导体行业观察&#xff08;ID&#xff1a;icbank&#xff09;编译自「ACM」&#xff0c;谢谢。微处理器的开放指令集有望重塑计算&#xff0c;并引入新的、更强大的功能。现代计算机依靠许多元件来提供高速和高性能&#xff0c;但是很少有比一台精简的指…

干货|六维力和力矩传感器的技术与应用

来源&#xff1a;机器人大讲堂六维力和力矩传感器是一种提供三轴力和三轴力矩反馈的设备&#xff0c;并广泛应用在机器人控制、力学实验和科研等不同的场景中。不同于其他常见的测力仪器&#xff0c;六维力和力矩传感器可以测量完整的六自由度环境力数据&#xff0c;从而使其适…

Spark笔记——技术点汇总

Spark笔记——技术点汇总 目录 概况 手工搭建集群 引言 安装Scala 配置文件 启动与测试 应用部署 部署架构 应用程序部署 核心原理 RDD概念 RDD核心组成 RDD依赖关系 DAG图 RDD故障恢复机制 Standalone模式的Spark架构 YARN模式的Spark架构 应用程序资源构建…

人工智能正在推动芯片的复兴

来源丨Forbes作者丨Rob Toews编译丨科技行者半导体是数字时代的一项基础技术。美国硅谷的名字正是源自于此。过去半个世纪以来&#xff0c;计算技术的革命改变着社会的方方面面&#xff0c;而半导体技术正是这场革命的核心。自英特尔1971年推出全球第一个微处理器以来&#xff…

MEMS为何独领风骚?看完这篇秒懂!

显微镜下的MEMS结构&#xff08;注意图片上的刻度&#xff0c;是微米哦&#xff09;文章来源&#xff1a;硬件十万个为什么卡西欧早年就以电机马达、继电器等机电产品闻名。如今的卡西欧本身就是MEMS的制造商之一&#xff0c;用MEMS的思路解决传统机械手表遇到的问题是卡西欧的…

如何把我的Java程序变成exe文件?

JAVA是一种“跨平台”的语言&#xff0c;拥有“一次编写&#xff0c;处处运行”的特点&#xff0c;让它成为当今IT行业&#xff0c;必不可少的一门编程语言。每一个软件开发完成之后&#xff0c;应该大家都需要打包程序并发送给客户&#xff0c;常见的方式&#xff1a;java程序…

福布斯:混合现实未来的八大应用场景

来源&#xff1a;AR工业应用近日&#xff0c;福布斯发布了一篇关于混合现实未来的八个值得关注的领域和应用场景。文中提到&#xff1a;随着时间的推移&#xff0c;技术永远在不断进展&#xff0c;而未来技术中很可能是AR和VR的结合形式。有报告显示&#xff1a;2024年&#xf…

演化树,靠不住?挑战物种出现与灭绝速率的估算方法

来源&#xff1a;Nature自然科研原文作者&#xff1a;Mark Pagel以演化树形式绘制的图表能够显示物种之间的系统发育关系&#xff0c;这类图表被广泛用于估算新物种出现以及现存物种灭绝的速率&#xff0c;但一项新的研究对这种方法提出了质疑。科学家经常试图对生物的过去是什…

2020五大技术趋势一览!超自动化、人类增强技术、无人驾驶发展、机器视觉崛起、区块链实用化...

文章原载于 RichardLiu自动驾驶技术的发展近年来&#xff0c;自动驾驶技术一直在发展&#xff0c;特斯拉、英特尔等大公司在这一领域取得了长足的进展。虽然我们还没有达到L4级或L5级自动驾驶汽车的水平&#xff0c;但我们已经很接近了。为了解释每个级别的含义&#xff0c;下…

Facebook 开源聊天机器人Blender,经94 亿个参数强化训练,更具“人情味”

来源&#xff1a;AI前线作者 | Kyle Wiggers编译 | Sambodhi策划 & 编辑 | 刘燕不久前&#xff0c;Facebook 开源了号称是全球最强大的聊天机器人 Blender&#xff0c;它标志着 Facebook 在 AI 领域的新进展&#xff1a;新的聊天机器人不仅解决了此前聊天机器人的固有缺点&…

微服务go还是java,Java微服务 vs Go微服务,究竟谁更强!?

前言Java微服务能像Go微服务一样快吗&#xff1f;这是我最近一直在思索地一个问题。去年8月份的the Oracle Groundbreakers Tour 2020 LATAM大会上&#xff0c;Mark Nelson和Peter Nagy就对此做过一系列基础的的测试用以比较。接下来就给大家介绍下。在程序员圈子里&#xff0c…

Defi安全-Mono攻击事件分析--etherscan+phalcon

MonoX攻击事件相关信息 在Ethereum和Polygon网络都发生了&#xff0c;攻击手段相同&#xff0c;以Ethereum为例进行分析&#xff1a; 攻击者地址&#xff1a;MonoX Finance Exploiter | Address 0xecbe385f78041895c311070f344b55bfaa953258 | Etherscan 攻击合约&#xff1a…

特斯拉自动驾驶靠自研芯片,国产智能汽车怎么办?

文章来源&#xff1a;量子位从这个月开始&#xff0c;特斯拉终于跌破30万&#xff0c;进入补贴行列&#xff0c;与国产汽车展开正面竞争。在国产汽车和特斯拉之间该如何选择&#xff0c;除了续航里程外&#xff0c;最重要的可能就是智能驾驶系统了。智能驾驶系统该怎么比较&…

【星·企业】竞逐卫星互联网“新基建”,「九天微星」完成2.7亿元B 轮融资

图为九天微星一箭七星“瓢虫系列”主星示意图来源&#xff1a;中科创星据了解&#xff0c;「九天微星」将用此轮融资在河北唐山和四川宜宾分别建设互联网卫星平台、载荷自动化产线&#xff0c;同时强化宽带通信系统研发能力&#xff0c;加速地面终端产品投产。九天微星卫星工厂…

3D原子映射有助于研究生命的起源

Chi Ma/Royal Ontario Museum来源&#xff1a;IEEE电气电子工程师一种相对较新的研究原子的技术可能会对地球上生命的起源提供更多的线索。科学家利用三维原子图&#xff08;特别是原子探针层析成像&#xff09;发现&#xff0c;太阳系中最古老的分子流体本可以支持氨基酸的发展…

混合现实未来的八大应用场景

来源&#xff1a;诚迈科技近日&#xff0c;福布斯发布了一篇关于混合现实未来的八个值得关注的领域和应用场景。文中提到&#xff1a;随着时间的推移&#xff0c;技术永远在不断进展&#xff0c;而未来技术中很可能是AR和VR的结合形式。有报告显示&#xff1a;2024年&#xff0…

4个重要的量子理论实验综述

文章原载于&#xff1a;大数据01 量子理论量子理论是一个容易让人迷惑的理论&#xff0c;因此&#xff0c;如果我们想准确地了解其概况&#xff0c;就需要非常谨慎。与大多数自牛顿著作和其他17世纪晚期科学家著作问世以来出现的物理学成果一样&#xff0c;量子理论是一个以数学…