欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解.NET中string與StringBuilder在字符串拼接功能上的比較

 更新時(shí)間:2018年11月04日 10:12:25   作者:森大科技  
string與StringBuilder的在字符串拼接時(shí)執(zhí)行效率上有差異,這篇文章主要介紹了詳解.NET中string與StringBuilder在字符串拼接功能上的比較,感興趣的小伙伴們可以參考一下

string與StringBuilder的在字符串拼接時(shí)執(zhí)行效率上有差異,因?yàn)镾tringBuilder類中用了一個(gè)技巧:它申請了兩倍的內(nèi)存空間存放字符串,在調(diào)用Append方法拼接字符串時(shí),會(huì)先檢查剩余的空間是否能放下要拼接的字符串,若能放下,則將要拼接的字符串Copy到剩余的空間中,若不能放下,則再申請拼接后的字符串兩倍的長度空間,將當(dāng)前字符串Copy到新的空間中(除了兩倍的空間外,這點(diǎn)跟string的拼接沒有太多的差異)。因此StringBuilder能提高字符串拼接的效率在于它減少了申請分配內(nèi)存的次數(shù),以及字符串Copy的數(shù)量。所以這里就有了以下4種情況的討論:

1.原來的長字符串拼接短字符串。

這實(shí)際上就是最吻合StringBuilder申請多余空間的意圖,能夠達(dá)到最好的效果的一種情形。具體的情況是這樣的,假設(shè)一個(gè)StringBuilder存放的初始字符串長度為1000,那么實(shí)例化這個(gè)StringBuilder時(shí),會(huì)申請2000的空間,隨后,每次拼接長度為20的字符串,則會(huì)直接將這長度為20的字符串按順序放在剩下的1000空間里,直到放滿為止,其間有50次的拼接操作,此時(shí)若再拼接一個(gè)長度為20的字符串時(shí),因?yàn)榭臻g不夠,這是StringBuilder會(huì)申請2000*2=4000的空間,然后將原先已拼接的長度2000的字符串Copy進(jìn)去后,繼續(xù)拼接新的長度為20的字符串。這最后一步跟string操作的效率幾乎一樣的,主要是前面的50次拼接能減少50次的內(nèi)存創(chuàng)建以及Copy全部字符串到新字符串的效率損耗。若是string進(jìn)行拼接,則前50次拼接操作中,每次都會(huì)新分配一塊內(nèi)存,并將現(xiàn)有的字符串全部Copy到新的內(nèi)存中。

2. 原來的長字符串拼接長字符串。

這種情況在開始時(shí)會(huì)因?yàn)榭臻g很快被用完,并不能體現(xiàn)StringBuilder在字符串拼接方面的優(yōu)勢,但隨著拼接次數(shù)的增加,會(huì)轉(zhuǎn)換成第一種情況。

3.原來的短字符串拼接短字符串。

4.原來的短字符串拼接長字符串。

其實(shí)后面三種情況都要根據(jù)實(shí)際來評估了,最終都是要向情況一進(jìn)行轉(zhuǎn)變。所以我們的關(guān)注點(diǎn)主要是被拼接的字符串與已有字符串之間長度的差距有多少,能減少多少次臨時(shí)內(nèi)存分配來達(dá)到提高字符串拼接效率的目的的。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • asp.net中List的使用方法

    asp.net中List的使用方法

    .net真是方便,這幾天幫朋友寫了個(gè)小軟件,用它還真感覺輕松自在,很稱手,自帶的類庫既豐富又實(shí)用
    2008-10-10
  • C#.net 微信公眾賬號接口開發(fā)

    C#.net 微信公眾賬號接口開發(fā)

    這篇文章主要介紹了C#.net 微信公眾賬號接口開發(fā),需要的朋友可以參考下
    2016-05-05
  • asp.net MVC利用ActionFilterAttribute過濾關(guān)鍵字的方法

    asp.net MVC利用ActionFilterAttribute過濾關(guān)鍵字的方法

    這篇文章主要介紹了asp.net MVC利用ActionFilterAttribute過濾關(guān)鍵字的方法,結(jié)合實(shí)例形式分析了ActionFilterAttribute過濾關(guān)鍵字的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-03-03
  • 實(shí)現(xiàn).Net7下數(shù)據(jù)庫定時(shí)檢查的方法詳解

    實(shí)現(xiàn).Net7下數(shù)據(jù)庫定時(shí)檢查的方法詳解

    在軟件開發(fā)過程中,有時(shí)候我們需要定時(shí)地檢查數(shù)據(jù)庫中的數(shù)據(jù),并在發(fā)現(xiàn)新增數(shù)據(jù)時(shí)觸發(fā)一個(gè)動(dòng)作。為了實(shí)現(xiàn)這個(gè)需求,本文我們在?.Net?7?下進(jìn)行一次簡單的演示。感興趣的可以了解一下
    2022-12-12
  • asp.net 存儲過程調(diào)用

    asp.net 存儲過程調(diào)用

    調(diào)用存儲過程,但無返回值 調(diào)用存儲過程,返回普通值 調(diào)用存儲過程,返回?cái)?shù)據(jù)集的實(shí)現(xiàn)代碼。
    2009-07-07
  • .NET發(fā)送郵件的實(shí)現(xiàn)方法示例

    .NET發(fā)送郵件的實(shí)現(xiàn)方法示例

    這篇文章主要給大家介紹了關(guān)于.NET發(fā)送郵件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用.net具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • ASP.NET Core+Docker+Jenkins實(shí)現(xiàn)持續(xù)集成的完整實(shí)例

    ASP.NET Core+Docker+Jenkins實(shí)現(xiàn)持續(xù)集成的完整實(shí)例

    這篇文章主要給大家介紹了關(guān)于ASP.NET Core+Docker+Jenkins實(shí)現(xiàn)持續(xù)集成的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • 詳解ASP.NET 生成二維碼實(shí)例(采用ThoughtWorks.QRCode和QrCode.Net兩種方式)

    詳解ASP.NET 生成二維碼實(shí)例(采用ThoughtWorks.QRCode和QrCode.Net兩種方式)

    本篇文章主要介紹了ASP.NET 生成二維碼實(shí)例,使用了兩種方法,包括ThoughtWorks.QRCode和QrCode.Net,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2016-12-12
  • C# Lambda表達(dá)式用途深入理解

    C# Lambda表達(dá)式用途深入理解

    假如我們想要從一個(gè)整型數(shù)組中取出其中是奇數(shù)的選項(xiàng),其實(shí)現(xiàn)方式有很多,接下來通過三種方法的對比理解Lambda表達(dá)式的用途,需要了解的朋友可以參考下
    2012-12-12
  • ASP.NET?MVC自定義操作過濾器

    ASP.NET?MVC自定義操作過濾器

    這篇文章介紹了ASP.NET?MVC自定義操作過濾器的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03

最新評論