[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 約 51hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

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

 

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

 (1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A 

 (2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I 

[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm  。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b  


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 MVC  => .NET Core MVC 線上教學  ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講   事先錄好的影片,並非上課側錄!   觀看時,有如「一對一」面對面講課