[FAQ]String(字串相連)與StringBuilder的差別、原理與優缺點?

摘要:[FAQ]String(字串相連)與StringBuilder的差別、原理與優缺點?

有請 msdn網站給我們官方的說明....

(文末有 Youtube影片)

 


 

 

 

這是一個FAQ囉。

 

 

今天看見msdn網站上一個範例,講得很清楚

 

除了給自己做一個記錄,將來上課能用到

也分享給大家。

 

資料來源:http://msdn.microsoft.com/zh-tw/library/system.string.aspx

=========================================================================================

不變性和 StringBuilder 類別
 
String 物件稱為不可變動的 (唯讀),因為建立它之後 便 "無法" 修改它的值
看起來好像會修改 String 物件的方法,其實是傳回 已修改之後的 "新" String 物件。
 
由於字串是不變的 (immutable),執行字串處理常式重複加入或刪除單一字串  可能會大幅影響效能。
例如,下列程式碼使用亂數產生器,在 0x0001 到 0x052F 的範圍中建立含 1000 個字元的字串。
 
儘管程式碼似乎是使用 字串串連(C#使用 + 符號。VB使用 & 符號)將新的字元附加至名為 str 的現有字串,
但它實際上會為每個串連作業建立 "新的" String 物件
 
using System;
using System.IO;
using System.Text;
 
public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
 
      string str = String.Empty;
      StreamWriter sw = new StreamWriter(@".\StringFile.txt", false, Encoding.Unicode);
 
      for (int ctr = 0; ctr <= 1000; ctr++) {
           str += Convert.ToChar(rnd.Next(1, 0x0530)); 
           if (str.Length % 60 == 0)
               str += Environment.NewLine;          
      }                    
      sw.Write(str);
      sw.Close();
   }
}
 
 
Imports System.IO
Imports System.Text
 
Module Example
   Public Sub Main()
      Dim rnd As New Random()
 
      Dim str As String = String.Empty
      Dim sw As New StreamWriter(".\StringFile.txt", False, Encoding.Unicode)
 
      For ctr As Integer = 0 To 1000
            str &= ChrW(rnd.Next(1, &h0530)) 
            If str.Length Mod 60 = 0 Then str &= vbCrLf          
      Next                    
      sw.Write(str)
      sw.Close()
   End Sub
End Module
 
=========================================================================================
 
對字串值進行 "多重變更" 的作業中,您可以使用 StringBuilder 類別取代 String 類別。
 
與 String 類別執行個體不同的是,StringBuilder 物件是可變的
 
當您串連、附加或刪除字串中的子字串時,作業是在單一字串上執行。
 
當您完成修改 StringBuilder 物件的值時,可以呼叫其 StringBuilder.ToString()方法,將它轉換為字串。
 
下列範例會取代所使用的 String 串連介於 1000 的任意字元到 0x0001 到與 StringBuilder 物件的 0x052F。
using System;
using System.IO;
using System.Text;    // for StringBuilder
 
public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
      StringBuilder sb = new StringBuilder();
      StreamWriter sw = new StreamWriter(@".\StringFile.txt", false, Encoding.Unicode);
 
      for (int ctr = 0; ctr <= 1000; ctr++) {
           sb.Append(Convert.ToChar(rnd.Next(1, 0x0530))); 
           if (sb.Length % 60 == 0)
                 sb.AppendLine();          
      }                    
      sw.Write(sb.ToString());
      sw.Close();
   }
}
 
 
 
Imports System.IO
Imports System.Text    '--for StringBuilder
 
Module Example
   Public Sub Main()
      Dim rnd As New Random()
      Dim sb As New StringBuilder()
      Dim sw As New StreamWriter(".\StringFile.txt", False, Encoding.Unicode)
 
      For ctr As Integer = 0 To 1000
            sb.Append(ChrW(rnd.Next(1, &h0530))) 
            If sb.Length Mod 60 = 0 Then sb.AppendLine()          
      Next                    
      sw.Write(sb.ToString())
      sw.Close()
   End Sub
End Module
 
 
 
 
以前測試過,字串相連、StringBuilder的執行速度,請看這篇文章 -- 
 
 
1.  文字數量大
2.  從資料表的欄位取出,且字串長度 忽長忽短時......StringBuilder有絕對的優勢。
 
 
[補充]  Youtube的影片介紹  https://youtu.be/hF-6eudOD0M
他用兩種寫法,比較速度快慢與資源消耗。如果您只想看結論,可以從 09:29秒看起
 
 
 
 
 
 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程,遠距教學 (Web Form 49hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程,遠距教學 (ASP.NET MVC 75hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

ASP.NET MVC線上課程 第一天 免費看 (5.5小時) 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

......................................................................................................................................................

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

累積時數約 75小時...... 第一天(5.5小時)完整內容,"免費"讓您評估