1.其一 在運行速度方面:StringBuilder > StringBuffer > String 上實例 上述兩個例子只是for迴圈 從0 到99 博主筆記本有點卡 當數據龐大時優勢就展示出了 鐵證如山 ,就是有圖有真相的那種 那麼, 為什麼會出現這種運行速度的差別,引出其二區別 2.其二 數據 ...
1.其一
在運行速度方面:StringBuilder > StringBuffer > String
上實例
class Program { static void Main(string[] args) { TheTestString(); } /// <summary> /// string /// </summary> public static void TheTestString() { string str = null; //創建計時器 頭一回見 引這個 System.Diagnostics 命名空間 Stopwatch stopwatch = new Stopwatch(); //計時器 START stopwatch.Start(); for (int i = 0; i < 100; i++) { str += i; } //計時器 END stopwatch.Stop(); //輸出STR Console.WriteLine(str); //輸出程式運行時間 Console.WriteLine(stopwatch.Elapsed); //控制台程式閃退的坑 Console.ReadKey(); } }
class Program { static void Main(string[] args) { //TheTestString(); StringBuilder(); } #region StringBuilder public static void StringBuilder() { StringBuilder stringBuilder = new StringBuilder(); Stopwatch stopwatch = new Stopwatch(); //計時器 START stopwatch.Start(); for (int i = 0; i < 100; i++) { stringBuilder.Append(i); } //計時器 END stopwatch.Stop(); //輸出STR Console.WriteLine(stringBuilder); //輸出程式運行時間 Console.WriteLine(stopwatch.Elapsed); //控制台程式閃退的坑 Console.ReadKey(); } #endregion }
上述兩個例子只是for迴圈 從0 到99 博主筆記本有點卡 當數據龐大時優勢就展示出了 鐵證如山 ,就是有圖有真相的那種 那麼,
為什麼會出現這種運行速度的差別,引出其二區別
2.其二
數據類型
string :乃字元串常量 引用數據類型,一旦創建即不可更改,stringbuilder:StringBuilder是一個可變的字元序列(百度百科)
又如
1 string str="張"; 2 console.writeline(str); 3 str+="三"; 4 console.writeline(str);
貌似從張變成了張三 但卻為兩個對象,變數名稱相同但是 指向的堆中數據不同 一個指向 “張“,另一個指向 “張三“”
而反觀stringbuilder以Char為單位向字元串分配空間,所以操作中不需要進行額外的記憶體分配
3.其三
線上程安全上,StringBuilder是線程不安全的,而StringBuffer是線程安全的
如果一個StringBuffer對象在字元串緩衝區被多個線程使用時,StringBuffer中很多方法可以帶有synchronized關鍵字,所以可以保證線程是安全的,
但StringBuilder的方法則沒有該關鍵字,所以不能保證線程安全,有可能會出現一些錯誤的操作。所以如果要進行的操作是多線程的,那麼就要使用StringBuffer,但是在單線
程的情況下,還是建議使用速度比較快的StringBuilder。(csdn)
ps:看一哈vs裡面的監視器,今天OVER。