多用StringBuilder,少用字符串拼接

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: |||超大  

在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,不是绝对的,要看情况。当拼接字符串很少的情况下,当然直接硬拼接字符串就行了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航