System.Text.StringBuilder與使用加號(+)直接串加有何差別? @ R~福氣拉! :: 隨意窩 Xuite日誌
  • BloggerAds
  • 關鍵字
  • Search Google
  • Google
    1. 沒有新回應!
  • 看起來滿像樣
  • 工商時間
  • 2008-02-01 15:04 System.Text.StringBuilder與使用加號(+)直接串加有何差別?
    平均分數:0 顆星    投票人數:0
    我要評分:

    String 物件,代表的是一種不變的字串,一旦您設定其值,就不能更改它。
     如果你要更改字串的任何一部份,唯一的方式就是去建立一個新的字串。
     例如:

     string a="1111";
     a+="2222";
     假設第一次a分配了4Bit (if)
     而在a+="2222" 則會在開1個8bit的空間把"11112222"存入,而存"1111"的空間會在記憶體回收時刪除。

    ◆System.Text.StringBuilder 中的Append,是在原有基礎上再分配空間。
      詳細內容可參考:
    http://blog.xuite.net/alwaysfuturevision/liminzhang/9570271


    ◆程式測試 (隨著執行的迴圈愈大,2者的執行效能差異更大~)
    DateTime startTime,endTime;
    String tempstr = "abcdefghijklmnopqrstuvwxyz中文字也加上去~";
    int times = 5000; //迴圈次數

    lb_msg.Text +=" string測試開始<br>";
    startTime=System.DateTime.Now;
    String str = "";
    for (int i = 0; i < times; i++)
    {
     str += tempstr;
    }
    endTime = DateTime.Now;  
    TimeSpan ts  =  endTime-startTime;
    int diff_Milliseconds =ts.Milliseconds ;//取毫秒
    lb_msg.Text +=" 執行時間【 " + startTime + " ~ " + endTime + " 】︰" + diff_Milliseconds.ToString () +"毫秒<br>";
       
    //..................................................
      
    lb_msg.Text +="<br><br>";
    lb_msg.Text +="StringBuilder測試開始<br>";
    startTime=System.DateTime.Now;
    System.Text.StringBuilder StringBuilder;
    StringBuilder = new System.Text.StringBuilder();
    for (int i = 0; i < times; i++)
    {
     StringBuilder.Append(tempstr);
    }
    endTime = DateTime.Now; 

    ts  =  endTime-startTime;
    diff_Milliseconds =ts.Milliseconds ;//取毫秒
    lb_msg.Text +=" 執行時間【 " + startTime + " ~ " + endTime + " 】︰" + diff_Milliseconds.ToString () +"毫秒<br>";


    小米 / Xuite日誌 / 回應(1) / 引用(0) / 好文轉寄
    回應