国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

string與stringbuilder的區別

2019-11-14 15:52:25
字體:
來源:轉載
供稿:網友

1、分析string與stringbuilder的區別,我們先來看下面一段代碼

首先我們使用string進行字符串的拼接

class PRogram    {        static void Main(string[] args)        {            //StringBuilder sb = new StringBuilder();            string str = null;            //創建一個計時器,計算程序運行的時間            Stopwatch sw = new Stopwatch();            //開始計時            sw.Start();            for (int i = 1; i < 10000;i++ )            {                //sb.Append(i);                str += i;            }            //結束計時            sw.Stop();            //Console.WriteLine(sb.ToString());            Console.WriteLine(str);            //輸出程序運行的時間            Console.WriteLine(sw.Elapsed);            Console.ReadKey();        }    }

 程序運行結果如下:

我們可以看到此時使用string程序的運行時間為0.125秒左右

下面我們再使用stringbulider

class Program    {        static void Main(string[] args)        {            StringBuilder sb = new StringBuilder();            //string str = null;            //創建一個計時器,計算程序運行的時間            Stopwatch sw = new Stopwatch();            //開始計時            sw.Start();            for (int i = 1; i < 10000;i++ )            {                sb.Append(i);                //str += i;            }            //結束計時            sw.Stop();            Console.WriteLine(sb.ToString());            //Console.WriteLine(str);            //輸出程序運行時間            Console.WriteLine(sw.Elapsed);            Console.ReadKey();        }    }

 此時程序運行結果為

我們可以看到使用stringbuilder程序運行時間只有0.0021秒左右,相比較與string程序運行速度快了許多倍

2、那么為什么stringbuilder的運行速度會比string快那么多呢

首先,我們看string:

(1)、string字符串,為引用類型,其具有不可變性。

我們一般認為的將內存分為五個區域。其中程序員常用的有三個,即棧、堆,靜態存儲區域。

其中值類型的值存儲在棧中,如int類型,而引用類型的值存儲在堆中

如下圖所示

而一旦我們將str的值改變  str=“李四”  看似我們改變的str的值,實際上

當str=“李四”時,我們在堆中新創建了一個對象“李四”其地址自然發生改變0x001001被干掉,換成了李四在堆中的地址0x002003

即看似我們改變了str的值,實際上卻創建了一個新的對象。

我們可以用一個簡單的代碼看一下其實際的運行情況:

我們使用監視器跟蹤str其中 *str跟蹤其地址,可以看到此時str的地址為0x00000000

使用逐語句進行調試

當str的值為“張三”后其地址發生了改變

而當str=“李四”后其地址又發生了改變

因此string類型具有不可變性,一旦其值發生了改變,就是一個新的對象。即每次對字符串進行操作時就會產生一個新的對象。

(2)、而StringBuilder類解決了在對字符串進行重復修改的過程中創建大量對象的問題。StringBuilder類以Char為單位向字符串分配空間,所以操作中不需要進行額外的內存分配。

對stringbuilder我們也可以使用上述代碼來說明。

我們可以看到整個過程并不會發生地址的改變。

綜上,如果操作少量的數據,我們可以使用string

如果有大量的字符拼接等操作,我們應使用stringbuilder。

 

 

萬丈高樓平地而起,基礎最重要!

 

關于string 與stringbuilder的一些常用方法會在下篇博客簡單總結。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天津市| 荥经县| 凤翔县| 华阴市| 虎林市| 碌曲县| 普兰县| 平定县| 龙泉市| 永德县| 阿坝| 张家口市| 遂溪县| 扎囊县| 教育| 道真| 象山县| 延川县| 望都县| 于田县| 舞钢市| 五寨县| 二手房| 沾化县| 会宁县| 阿克| 岚皋县| 佛教| 广宗县| 康定县| 东兰县| 那坡县| 北宁市| 任丘市| 和田市| 望奎县| 灵石县| 新平| 明水县| 乳山市| 孝昌县|