程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 談String與StringBuilder的性能

談String與StringBuilder的性能

編輯:關於.NET

String和StringBuilder 的性能比較,網上能找到很多,但是大多數都是比較字符串的連接性能,字 符串的連接 String +=的效率確實不如StringBuilder ,這個大家都能在網上找很多的示例。就這樣,我 們被這些鐵證同化了,我們開始泛濫的使用StringBuilder,StringBuilder 就是B String好,甚至有些 朋友更進一步,對StringBuilder再進行封裝,重載運算符搞個類,來代替String。

但是不是對字符串的一些操作String 都不如StringBuilder呢?

String 和StringBuilder的區別:

1. 雖然兩者都是引用類型,但是在C#中String作為值的時候通常當做結構體一樣處理,例如:我們寫 :

string text = "abc";
text.Replace("a", "b");

是不是這樣,text的值就變了呢?很顯然沒有,我們得這樣寫:

text = text.Replace("a", "b");

還有String作為函數參數的時候,我們是否意識了呢?

如果換做StringBuilder就不需要第三步的代碼了。

2. String 和StringBuilder的方法也並不是完全一樣,這是廢話,當然不會一樣了,那好,那就是他 們也包含相同,相似的功能的方法。

以前我了解到StringBuilder 在連接字符串的時候效率很高,從此以後我就愛屋及烏,只要遇到 String的方法在StringBuilder中有的,就會優先使用 StringBuilder,也沒問為什麼,腦子裡就一個信 仰,StringBuilder真漢子,鐵血真爺們!

這裡,我就開始有些懷疑,難道StringBuilder的中的方法都比String的強嗎?探索精神,耶!

我用的是VS2008,見如下代碼:

string strValue = "this is a test @param ";
StringBuilder strTest = new StringBuilder();
for (long i = 0; i < 1000000; i++)
{
   strTest.Append(strValue);
}
string content = strTest.ToString();
Stopwatch watch = new Stopwatch();
watch.Reset();
watch.Start();
string replaceContent = content.Replace("@param", "哈哈");
watch.Stop();
Console.WriteLine("String: 長度:{0} >>耗時: {1}", replaceContent.Length,  watch.ElapsedMilliseconds);
watch.Reset();
watch.Start();
strTest.Replace("@param", "哈哈");
watch.Stop();
Console.WriteLine("StringBuilder: 長度:{0} >>耗時: {1}", strTest.Length,  watch.ElapsedMilliseconds);

結果顯示:

看到了吧,String 的Replace的耗時比StringBuilder更少,所以這個測試的結論是:String的 Replace的性能比StringBuilder更好。至於其他的方法,可以自己測試一下,這裡就不列出來了。

結論:那這個小小的測試告訴我們什麼呢? “並不是我什麼都比你差,你也什麼都比我好,嘿嘿…” String得意的笑著。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved