C 字串拼接的幾種方式

2021-10-07 02:54:57 字數 2047 閱讀 5188

c#字串連線常用的四種方式:stringbuilder、+、string.format、list。

1.+的方式

string sql = 「update tablename set int1=」 + int1.tostring() + 「,int2=」 + int2.tostring() + 「,int3=」 + int3.tostring() + " where id=" + id.tostring();

編譯器會優化為:

string sql = string.concat(new string{});

通過分析string.concat(params string values)的實現可以知道:先計算目標字串的長度,然後申請相應的空間,最後逐一複製,時間複雜度為o(n),常數為1。

固定數量的字串連線效率最高的是+。

但是字串的連+不要拆成多條語句,比如:

string sql = 「update tablename set int1=」;

sql += int1.tostring();

sql += …

這樣的**,不會被優化為string.concat,就變成了效能殺手,因為第i個字串需要複製n-i次,時間複雜度就成了o(n^2)。

2.stringbuilder的方式

stringbuilder 只分配一次記憶體,如果第二次連線記憶體不足,則修改記憶體大小;它每次預設分配16位元組,如果記憶體不足,則擴充套件到32位元組,如果仍然不足,繼續成倍擴充套件。

如果頻繁的擴充套件記憶體,效率大打折扣,因為分配記憶體,時間開銷相對比較大。如果事先能準確估計程式執行過程中所需要的記憶體,從而一次分配足記憶體,效率大大提高。

如果字串的數量不固定,就用stringbuilder,一般情況下它使用2n的空間來保證o(n)的整體時間複雜度,常數項接近於2。

因為這個演算法的實用與高效,.net類庫裡面有很多動態集合都採用這種犧牲空間換取時間的方式,一般來說效果還是不錯的。

3.string.format的方式

它的底層是stringbuilder,所以其效率與stringbuiler相似。

public

static

string

format

(iformatprovider provider,

string format,

params

object

args)

stringbuilder sb = stringbuildercache.

acquire

(format.length +

(args.length *8)

);sb.

(provider, format, args)

;return stringbuildercache.

getstringandrelease

(sb)

;}

4.list它可以轉換為string後使用string.concat或string.join,很多時候效率比stringbuiler更高效。list與stringbuilder採用的是同樣的動態集合演算法,時間複雜度也是o(n),與stringbuilder不同的是:list的n是字串的數量,複製的是字串的引用;stringbuilder的n是字串的長度,複製的資料。不同的特性決定的它們各自的適應環境,當子串比較大時建議使用list,因為複製引用比複製資料划算。而當子串比較小,比如平均長度小於8,特別是乙個乙個的字元,建議使用stringbuilder。

msdn中關於stringbuilder的效能注意事項:

string 或 stringbuilder 物件的串聯操作的效能取決於記憶體分配的發生頻率。string 串聯操作每次都分配記憶體,而 stringbuilder 串聯操作僅當 stringbuilder 物件緩衝區太小而無法容納新資料時才分配記憶體。因此,如果串聯固定數量的 string 物件,則 string 類更適合串聯操作。這種情況下,編譯器甚至會將各個串聯操作組合到乙個操作中。如果串聯任意數量的字串,則 stringbuilder 物件更適合串聯操作;例如,某個迴圈對使用者輸入的任意數量的字串進行串聯。

golang 幾種字串的拼接方式

最近在做效能優化,有個函式裡面的耗時特別長,看裡面的操作大多是一些字串拼接的操作,而字串拼接在 golang 裡面其實有很多種實現。1.直接使用運算子func benchmarkaddstringwithoperator b testing.b golang 裡面的字串都是不可變的,每次運算都會產生...

java字串拼接的幾種方式

1.plus方式 當左右兩個量其中有乙個為string型別時,用plus方式可將兩個量轉成字串並拼接。string a int b 0xb string c a b 2.concat方式 當兩個量都為string型別且值不為null時,可以用concat方式。string a a string b ...

mysql 字串拼接的幾種方式

字串拼接分為幾種方式,在這裡會一一舉例寫出 mysql自帶語法concat string1,string2,此處是直接把string1和string2等等的字串拼接起來 無縫拼接哦 說明 此方法在拼接的時候如果有乙個值為null,則返回null 如 第二種也是mysql自帶語法concat ws s...