刚刚入职,需要根据给定的二进制文件翻译成大白话文,涉及到了很多优先级、帧号等等,前期编程过程中没有过多的注意加上没有拿实际数据测试,大量使用了拼接字符串(+、+=),在文本量or数据量很小的情况下运行很完美,几乎没什么卡顿,最后拿采集到的实际数据(50M左右二进制文件)进行测试时,程序运行奇慢无比,甚至会导致奔溃。
寻求同事帮助,发现拼接字符串这一项上耗用太多时间,以及GC(Garbage Collector)回收不及时,轻轻松松程序就奔溃了。后来经过在网上查阅各类资料,发现在涉及大量字符串拼接的时候可以使用System.Text.StringBuilder类。
using System.Text;
StringBuilder myString = new StringBuilder(); //创建StringBuilder类的新实例
StringBuilder myString1 = new StringBuilder(50); //该对象的容量
myString1.Capacity = 25; //也可以这么设置容量
StringBuilder myString2 = new StringBuilder("yes,i do.",50); // 这样也行
StringBuilder对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值。此值称为该对象的容量。容量和字符数量不一样,当修改StringBuilder时,在达到容量之前,它不会为其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍。个人认为可设可不设。
方法名 | 用途 |
---|---|
StringBuilder.Append | 将信息追加到当前StringBuilder的结尾 |
StringBuilder.AppendFormat | 用带格式文本替换字符串中传递的格式说明符 |
StringBuilder.Insert | 将字符串或对象插入到当前 StringBuilder 对象的指定索引处 |
StringBuilder.Remov | 从当前 StringBuilder 对象中移除指定数量的字符 |
StringBuilder.Replace | 替换指定索引处的指定字符 |
个人而言使用的比较多的是StringBuilder.Append、StringBuilder.AppendFormat ,具体用法如下:
using System.Text;
StringBuilder myString = new StringBuilder(); //创建StringBuilder类的新实例
myString.Append("添加的字符串文本1");
myString.Append("添加的字符串文本2");
string str1 = "字符串文本1";
string str2 = "字符串文本2";
string str3;
myString.AppendFormat("添加{0},添加{1}",str1,str2);
str3 = myString.ToString();
使用时记得ToString()。
c#中stringbuilder的使用
C# .Net String字符串效率提高-字符串拼接
C#代码优化—字符串拼接效率比较
C# 性能优化——三种字符串拼接效率