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...