C 中大量字串拼接導致程式執行過慢奔潰等問題

2021-10-23 11:00:15 字數 2037 閱讀 6595

剛剛入職,需要根據給定的二進位制檔案翻譯成大白話文,涉及到了很多優先順序、幀號等等,前期程式設計過程中沒有過多的注意加上沒有拿實際資料測試,大量使用了拼接字串(+、+=),在文字量or資料量很小的情況下執行很完美,幾乎沒什麼卡頓,最後拿採集到的實際資料(50m左右二進位制檔案)進行測試時,程式執行奇慢無比,甚至會導致奔潰。

尋求同事幫助,發現拼接字串這一項上耗用太多時間,以及gc(garbage collector)**不及時,輕輕鬆鬆程式就奔潰了。後來經過在網上查閱各類資料,發現在涉及大量字串拼接的時候可以使用system.text.stringbuilder類。

using system.text;

stringbuilder mystring =

newstringbuilder()

;//建立stringbuilder類的新例項

stringbuilder mystring1 =

newstringbuilder(50

);//該物件的容量

mystring1.capacity =25;

//也可以這麼設定容量

stringbuilder mystring2 =

newstringbuilder

("yes,i do.",50

);// 這樣也行

stringbuilder物件是動態物件,允許擴充它所封裝的字串中字元的數量,但是您可以為它可容納的最大字元數指定乙個值。此值稱為該物件的容量。容量和字元數量不一樣,當修改stringbuilder時,在達到容量之前,它不會為其自己重新分配空間。當達到容量時,將自動分配新的空間且容量翻倍。個人認為可設可不設。

方法名用途

將資訊追加到當前stringbuilder的結尾

用帶格式文字替換字串中傳遞的格式說明符

stringbuilder.insert

將字串或物件插入到當前 stringbuilder 物件的指定索引處

stringbuilder.remov

從當前 stringbuilder 物件中移除指定數量的字元

stringbuilder.replace

替換指定索引處的指定字元

using system.text;

stringbuilder mystring =

newstringbuilder()

;//建立stringbuilder類的新例項

mystring.

("新增的字串文字1");

mystring.

("新增的字串文字2");

string str1 =

"字串文字1"

;string str2 =

"字串文字2"

;string str3;

mystring.

("新增,新增"

,str1,str2)

;str3 = mystring.

tostring()

;

使用時記得tostring()

對於少量固定的字串拼接可以使用「+」,如string str = 「a」 + 「b」 + 「c」,則csc編譯器會優化成 str = string.concat(「a」, 「b」, 「c」); 不會建立多個字串。如果寫成 string str = 「a」; s += 「b」; s += 「c」; 則會多建立3個新字串。

字串較少時,可以使用stirng.format()代替stringbuider。string.format() : 字串格式化,內部呼叫的是stringbuilder。

當操作大量字串時,比如在迴圈體內or大量字串拼接等等,一定要使用stringbuider!一定要使用stringbuider!一定要使用stringbuider!c#中stringbuilder的使用

c# .net string字串效率提高-字串拼接

c#**優化—字串拼接效率比較

c# 效能優化——三種字串拼接效率

c 拼接字串陣列 C 字串拼接

測試環境 unity2018.4 net4.x。需要注意.net4.x和3.5差異還是挺大的 寫的內容大部分網上已有,算是總結他人的成果,是 1 先說幾條結論 1 1 字串在c 中是高頻出現的 1 2 這類高頻出現方法 字段通常不是每幀的效能瓶頸。但有可能是瞬間卡頓的 1 3 字串記憶體開銷計算 2...

c 拼接字串陣列 陣列 字串拼接

題目描述輸入乙個正整數陣列,把陣列裡所有數字拼接起來排成乙個數,列印能拼接出的所有數字中最小的乙個。例如輸入陣列,則列印出這三個數字能排成的最小數字為321323。public class solution 交換的值不是拼接後的兩個相鄰字串 if before after for int i 0 i...

C 字串拼接顯示

常見的c字串拼接可能就是將條字串拼接在一塊新的記憶體區域內,並得到新記憶體區域的起始位址,這類操作可以自己寫,也可以使用c庫函式 c c extern char strcat const char dest,const char src 將src字串新增到dest字串末尾,並返回dest位址 但是此...