多用StringBuilder,少用字符串拼接
在C#中,在处理字符串拼接的时候,使用StringBuilder的效率会比硬拼接字符串高很多。到底有多高,如下:
static void Main(string[] args){string str1 = string.Empty;Stopwatch sw1 = new Stopwatch();sw1.Start();for (int i = 0; i < 10000; i++){str1 = str1 + i.ToString();}sw1.Stop();Console.WriteLine("拼接字符串所耗费时间为:" + sw1.ElapsedMilliseconds + "毫秒");StringBuilder str2 = new StringBuilder(10000);Stopwatch sw2 = new Stopwatch();sw2.Start();for (int i = 0; i < 10000; i++){str2.Append(i.ToString());}sw2.Stop();Console.WriteLine("使用StringBuilder所耗费时间为:" + sw2.ElapsedMilliseconds + "毫秒");Console.ReadKey();}

为什么?
string类型的特别之处在于我们可以像使用值类型那样使用string类型,而实际上string是引用类型。既然是引用类型,CLR就会把string类型保存在托管堆上。当我们使用str1 = str1 + i.ToString();进行拼接,由于string类型的恒定性,不会改变str1在内存中的地址,而是在托管堆上创建了另外一个字符串对象。如此,拼接10000次,就创建了10000个string类型对象,效率难免低下。
而StringBuilder会在内存中开辟一块连续的内存,当增加字符串实际上是针对同一块内存的修改,所以效率更高。
当然,到底使用硬拼接字符串,还是使用StringBuilder,不是绝对的,要看情况。当拼接字符串很少的情况下,当然直接硬拼接字符串就行了。
多用StringBuilder,少用字符串拼接的更多相关文章
- C#的StringBuilder 以及string字符串拼接的效率对照
今天公司一个做Unity3d的人在说字符串拼接的一个效率问题,他觉得string拼接会产生新的一个内存空间,假设不及时回收会产生大量的碎片,特别是在Unity3d这样一个Updata环境下,由于每一帧 ...
- Java 字符串拼接 StringBuilder() StringBuffer
字符串拼接 普通方式 public class StringDemo2 { public static void main(String[] args) { // 表示获取从1970- ...
- StringBuilder 字符串拼接扩容
String str = a + b + c(a,b,c都是变量,非常量) 实际执行时,"+"操作是通过创建一个StringBuilder来操作的,即: StringBuilder ...
- StringBuilder(字符串拼接类)
StringBuilder是在using System.Text命名空间下的一个成员. 在做字符串拼接的时候,因为字符串是引用类型,新的字符串是会再内存中创建的,所以用+号拼接字符串是比较耗效率的. ...
- 精简版StringBuilder,提速字符串拼接
编写目的 在频繁的字符串拼接中,为了提升程序的性能,我们往往会用StringBuilder代替String+=String这样的操作; 而我在实际编码中发现,大部分情况下我用到的只是StringBui ...
- 从源代码的角度聊聊java中StringBuffer、StringBuilder、String中的字符串拼接
长久以来,我们被教导字符串的连接最好用StringBuffer.StringBuilder,但是我们却不知道这两者之间的区别.跟字符串相关的一些方法中总是有CharSequence.StringBuf ...
- StringBuilder字符串拼接类
StringBuilder StringBuilder是在using System.Text命名空间下的一个成员. 在做字符串拼接的时候,因为字符串是引用类型,新的字符串是会再内存中创建的,所以用+号 ...
- Java中测试StringBuilder、StringBuffer、String在字符串拼接上的性能
应一个大量字符串拼接的任务 测试一下StringBuilder.StringBuffer.String在操作字符串拼接时候的性能 性能上理论是StringBuilder > StringBu ...
- C# 利用StringBuilder提升字符串拼接性能
一个项目中有数据图表呈现,数据量稍大时显得很慢. 用Stopwatch分段监控了一下,发现耗时最多的函数是SaveToExcel 此函数中遍列所有数据行,通过Replace替换标签生成Excel行,然 ...
随机推荐
- PYTHON-range和xrange区别
range会根据输入,生成一个list. xrange功能类似,但生成的不是一个list,而是一个迭代器,每次调用是返回一个数字.这样比较节省内存.
- **linux实用命令之如何移动文件夹及文件下所有文件
http://www.linuxde.net/2013/02/12448.html 格式: mv [选项(option)] 源文件或目录 目标文件或目录 使用命令: mv webdata /bin/u ...
- android:怎么实现一个控件与另一个指定控件左对齐
https://segmentfault.com/q/1010000003905460?_ea=425861 针对你这种情况,最简单的一种办法是,设置两个TextView的宽度为固定值,且相等. Li ...
- Scala 学习笔记(2)之类和对象
Scala 的类大抵和 Java 是类似的,简单的例子如下: class MyClass { var myField : Int = 0; def this(value : Int) = { this ...
- Java 构造 BSON 数据类型
Java 构造 BSON 数据类型 整数/符浮点数 Java BSON 构造整数/符浮点数类型 // {a:123, b:3.14} BSONObject obj = new BasicBSONObj ...
- ansible学习
声明:本博客内容是根据惨绿少年内容实践随笔,地址:http://www.cnblogs.com/clsn/p/7743792.html#comment_form 1.ansible介绍 Ansible ...
- 【LOJ】#2098. 「CQOI2015」多项式
题解 令x = x - t代换一下会发现 \(\sum_{i = 0}^{n}a_i (x + t)^i = \sum_{i = 0}^{n} b_{i} x^{i}\) 剩下的就需要写高精度爆算了- ...
- Stable Match
稳定婚姻问题 主要就是处理两个数组 boy[i][j] 存放第i个男的第j喜欢的女的 存的是女的编号!! girl[i][j] 存放 第i个女的对第j个男的的好感度 存的是值 然后只要 ...
- js导出带格式的表格(包括单元格合并,字体样式等)
function HtmlExportToExcelForEntire() { var uri = 'data:application/vnd.ms-excel;base64,', template ...
- jquery.validate.js自定义表单验证
$(document).ready(function() { //在下列位置输入页面加载的逻辑代码 $("#inputForm").validate({ rules: { seq: ...