乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      性能: 字符串拼接

       悟靜 2012-02-16

      由于使用 System.String 類會(huì)在某些場(chǎng)合帶來明顯的性能損耗,所以微軟另外提供了一個(gè)類型StringBuilder來彌補(bǔ)String的不足。

      StringBuilder并不會(huì)重新創(chuàng)建一個(gè)string 對(duì)象,它的效率源于預(yù)先以非托管的方式分配內(nèi)存。如果StringBuilder 沒有先定義長度,則默認(rèn)分配的長度為16。當(dāng) StringBuilder 字符長度小于等于 16時(shí),StringBuilder 不會(huì)重新分配內(nèi)存;當(dāng) StringBuilder 字符長度大于16 小于 32時(shí),StringBuilder 又會(huì)重新分配內(nèi)存,使之成為 16的倍數(shù)。在上面的代碼中,如果預(yù)先判斷字符串的長度將大于16,則可以為其設(shè)定一個(gè)更加合適的長度(如32)。StringBuilder重新分配內(nèi)存時(shí)是按照上次的容量加倍進(jìn)行分配的。當(dāng)然,我們需要注意,StringBuilder指定的長度要合適,太小了,需要頻繁分配內(nèi)存;太大了,浪費(fèi)空間。

      曾經(jīng)有人問我,下面的兩種字符串拼接方式,哪種效率更高:

      1. 1.      private static void NewMethod8()  
      2.         {  
      3.             string a = "t";  
      4.             a += "e";  
      5.             a += "s";  
      6.             a += "t";  
      7.         }  
      8.  
      9. 2.      private static void NewMethod7()  
      10.         {  
      11.             string a = "t";  
      12.             string b = "e";  
      13.             string c = "s";  
      14.             string d = "t";  
      15.             string result = a + b + c + d;  
      16.         } 

      答案是:兩者效率都不高。不要以為前者比后者創(chuàng)建的字符串對(duì)象更少,事實(shí)上,兩者創(chuàng)建的字符串對(duì)象相等,且前者進(jìn)行了3次string.Contact方法調(diào)用,比后者還多了兩次。

      要完成這樣的運(yùn)行時(shí)字符串拼接(注意:是運(yùn)行時(shí)),更佳的做法是使用StringBuilder類型,代碼如下所示:

      1. private static void NewMethod10()  
      2. {  
      3.     //為了演示的需要,定義了4個(gè)變量  
      4.     string a = "t";  
      5.     string b = "e";  
      6.     string c = "s";  
      7.     string d = "t";  
      8.     StringBuilder sb = new StringBuilder(a);  
      9.     sb.Append(b);  
      10.     sb.Append(c);  
      11.     sb.Append(d);  
      12.     //再次提示,是運(yùn)行時(shí),所以沒有使用下面的代碼  
      13.     //StringBuilder sb = new StringBuilder("t");  
      14.     //sb.Append("e");  
      15.     //sb.Append("s");  
      16.     //sb.Append("t");  
      17.     string result = sb.ToString();  

      微軟還提供了另外一個(gè)方法來簡(jiǎn)化這種操作,即使用string.Format方法。string.Format方法在內(nèi)部使用StringBuilder進(jìn)行字符串的格式化,如下面的代碼所示:

      1. private static void NewMethod11()  
      2. {  
      3.     //為了演示的需要,定義了4個(gè)變量  
      4.     string a = "t";  
      5.     string b = "e";  
      6.     string c = "s";  
      7.     string d = "t";  
      8.     string.Format("{0}{1}{2}{3}", a, b, c, d);  

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多