您好,登錄后才能下訂單哦!
小編給大家分享一下.NET中string與StringBuilder在字符串拼接功能上有什么區(qū)別,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
string與StringBuilder的在字符串拼接時(shí)執(zhí)行效率上有差異,因?yàn)镾tringBuilder類(lèi)中用了一個(gè)技巧:它申請(qǐng)了兩倍的內(nèi)存空間存放字符串,在調(diào)用Append方法拼接字符串時(shí),會(huì)先檢查剩余的空間是否能放下要拼接的字符串,若能放下,則將要拼接的字符串Copy到剩余的空間中,若不能放下,則再申請(qǐng)拼接后的字符串兩倍的長(zhǎng)度空間,將當(dāng)前字符串Copy到新的空間中(除了兩倍的空間外,這點(diǎn)跟string的拼接沒(méi)有太多的差異)。因此StringBuilder能提高字符串拼接的效率在于它減少了申請(qǐng)分配內(nèi)存的次數(shù),以及字符串Copy的數(shù)量。所以這里就有了以下4種情況的討論:
1.原來(lái)的長(zhǎng)字符串拼接短字符串。
這實(shí)際上就是最吻合StringBuilder申請(qǐng)多余空間的意圖,能夠達(dá)到最好的效果的一種情形。具體的情況是這樣的,假設(shè)一個(gè)StringBuilder存放的初始字符串長(zhǎng)度為1000,那么實(shí)例化這個(gè)StringBuilder時(shí),會(huì)申請(qǐng)2000的空間,隨后,每次拼接長(zhǎng)度為20的字符串,則會(huì)直接將這長(zhǎng)度為20的字符串按順序放在剩下的1000空間里,直到放滿為止,其間有50次的拼接操作,此時(shí)若再拼接一個(gè)長(zhǎng)度為20的字符串時(shí),因?yàn)榭臻g不夠,這是StringBuilder會(huì)申請(qǐng)2000*2=4000的空間,然后將原先已拼接的長(zhǎng)度2000的字符串Copy進(jìn)去后,繼續(xù)拼接新的長(zhǎng)度為20的字符串。這最后一步跟string操作的效率幾乎一樣的,主要是前面的50次拼接能減少50次的內(nèi)存創(chuàng)建以及Copy全部字符串到新字符串的效率損耗。若是string進(jìn)行拼接,則前50次拼接操作中,每次都會(huì)新分配一塊內(nèi)存,并將現(xiàn)有的字符串全部Copy到新的內(nèi)存中。
2. 原來(lái)的長(zhǎng)字符串拼接長(zhǎng)字符串。
這種情況在開(kāi)始時(shí)會(huì)因?yàn)榭臻g很快被用完,并不能體現(xiàn)StringBuilder在字符串拼接方面的優(yōu)勢(shì),但隨著拼接次數(shù)的增加,會(huì)轉(zhuǎn)換成第一種情況。
3.原來(lái)的短字符串拼接短字符串。
4.原來(lái)的短字符串拼接長(zhǎng)字符串。
其實(shí)后面三種情況都要根據(jù)實(shí)際來(lái)評(píng)估了,最終都是要向情況一進(jìn)行轉(zhuǎn)變。所以我們的關(guān)注點(diǎn)主要是被拼接的字符串與已有字符串之間長(zhǎng)度的差距有多少,能減少多少次臨時(shí)內(nèi)存分配來(lái)達(dá)到提高字符串拼接效率的目的的。
看完了這篇文章,相信你對(duì)“.NET中string與StringBuilder在字符串拼接功能上有什么區(qū)別”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。