在C#中,在處理字符串拼接的時(shí)候,使用StringBuilder的效率會(huì)比硬拼接字符串高很多。到底有多高,如下:
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("拼接字符串所耗費(fèi)時(shí)間為:" + 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所耗費(fèi)時(shí)間為:" + sw2.ElapsedMilliseconds + "毫秒");Console.ReadKey();}
為什么?
string類型的特別之處在于我們可以像使用值類型那樣使用string類型,而實(shí)際上string是引用類型。既然是引用類型,CLR就會(huì)把string類型保存在托管堆上。當(dāng)我們使用str1 = str1 + i.ToString();進(jìn)行拼接,由于string類型的恒定性,不會(huì)改變str1在內(nèi)存中的地址,而是在托管堆上創(chuàng)建了另外一個(gè)字符串對(duì)象。如此,拼接10000次,就創(chuàng)建了10000個(gè)string類型對(duì)象,效率難免低下。
而StringBuilder會(huì)在內(nèi)存中開(kāi)辟一塊連續(xù)的內(nèi)存,當(dāng)增加字符串實(shí)際上是針對(duì)同一塊內(nèi)存的修改,所以效率更高。
當(dāng)然,到底使用硬拼接字符串,還是使用StringBuilder,不是絕對(duì)的,要看情況。當(dāng)拼接字符串很少的情況下,當(dāng)然直接硬拼接字符串就行了。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注