免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
性能: 字符串拼接

由于使用 System.String 類會在某些場合帶來明顯的性能損耗,所以微軟另外提供了一個類型StringBuilder來彌補String的不足。

StringBuilder并不會重新創(chuàng)建一個string 對象,它的效率源于預先以非托管的方式分配內(nèi)存。如果StringBuilder 沒有先定義長度,則默認分配的長度為16。當 StringBuilder 字符長度小于等于 16時,StringBuilder 不會重新分配內(nèi)存;當 StringBuilder 字符長度大于16 小于 32時,StringBuilder 又會重新分配內(nèi)存,使之成為 16的倍數(shù)。在上面的代碼中,如果預先判斷字符串的長度將大于16,則可以為其設定一個更加合適的長度(如32)。StringBuilder重新分配內(nèi)存時是按照上次的容量加倍進行分配的。當然,我們需要注意,StringBuilder指定的長度要合適,太小了,需要頻繁分配內(nè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)建的字符串對象更少,事實上,兩者創(chuàng)建的字符串對象相等,且前者進行了3次string.Contact方法調(diào)用,比后者還多了兩次。

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

  1. private static void NewMethod10()  
  2. {  
  3.     //為了演示的需要,定義了4個變量  
  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.     //再次提示,是運行時,所以沒有使用下面的代碼  
  13.     //StringBuilder sb = new StringBuilder("t");  
  14.     //sb.Append("e");  
  15.     //sb.Append("s");  
  16.     //sb.Append("t");  
  17.     string result = sb.ToString();  

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

  1. private static void NewMethod11()  
  2. {  
  3.     //為了演示的需要,定義了4個變量  
  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);  
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C#拼接string字符串
StringBuffer和StringBuilder的區(qū)別
C#中那些[舉手之勞]的性能優(yōu)化
常見的字符串處理功能擴展
第十五天 常用API-object&string&stringbuilder&stringbuffer【悟空教程】
昨天還在for循環(huán)里寫加號拼接字符串的那個小姐姐,今天已經(jīng)不在了
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服