多用StringBuilder,少用字符串拼接_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 多用StringBuilder,少用字符串拼接

多用StringBuilder,少用字符串拼接

 2015/3/23 9:58:11  Darren Ji  程序员俱乐部  我要评论(0)
  • 摘要:在C#中,在处理字符串拼接的时候,使用StringBuilder的效率会比硬拼接字符串高很多。到底有多高,如下:staticvoidMain(string[]args){stringstr1=string.Empty;Stopwatchsw1=newStopwatch();sw1.Start();for(inti=0;i<10000;i++){str1=str1+i.ToString();}sw1.Stop();Console.WriteLine("拼接字符串所耗费时间为:"+sw1
  • 标签:字符串

在C#中,在处理字符串拼接的时候,使用StringBuilder的效率会比硬拼接字符串高很多。到底有多高,如下:

 

monospace; width: 100%; margin: 0em; background-color: #f0f0f0">        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();
        }

1

 

为什么?

 

string类型的特别之处在于我们可以像使用值类型那样使用string类型,而实际上string是引用类型。既然是引用类型,CLR就会把string类型保存在托管堆上。当我们使用str1 = str1 + i.ToString();进行拼接,由于string类型的恒定性,不会改变str1在内存中的地址,而是在托管堆上创建了另外一个字符串对象。如此,拼接10000次,就创建了10000个string类型对象,效率难免低下。

 

而StringBuilder会在内存中开辟一块连续的内存,当增加字符串实际上是针对同一块内存的修改,所以效率更高。       

发表评论
用户名: 匿名