在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,不是絕對的,要看情況。當拼接字符串很少的情況下,當然直接硬拼接字符串就行了。
新聞熱點
疑難解答