当前位置: 首页 > 图文教程 > .Net技术 > C# > C#:小编详谈StringBuilder

C#
C#:小编详谈ASP.NET和JSP技术
C#:小编详谈StringBuilder
C#:使用CSS的8种技巧
C#:C#开发技巧之将图片存入数据库
C#:C#技术点之利用Image制作小动画
C#:C#开发技巧之如何根据年份判断十二生肖
C#:如何制作自动播放的MP3播放器
c#:C#技术利用鼠标绘图
C#:禁用鼠标左键
C#:如何使用匿名方法
C#:小编教你如何实现特殊形状的窗体
C#:在C#应用程序控制输入法
C#:小编教大家实现堆栈
C#:C#中数组知识点的精华
C#:小编谈C#中TextBox控件的应用技巧
C#:小编教大家设置货币值中使用的小数位数
C#:C#中实现倒计时功能
C#:小编教大家创建一个数字时钟
C#:小编教大家如何向ListView控件添加搜索功能
C#:小编浅谈如何在DataGridView控件中验证数据输入

C#:小编详谈StringBuilder


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 294 ::
收藏到网摘: n/a

谈到stringbuile这个类颇有感触,记得第一次找工作的时候就被问到strungstringbuilder的区别,当时回答的一塌糊涂。今天整理了一下,发布上来,希望对大家有所帮助。

String对象是恒定不变的,而System.Text.StringBuilder对象表示的字符串是可变的。StringBuilder.NET提供的动态创建String对象的高效方式,以克服String对象恒定性带来的性能影响,克服了对String对象进行多次修改带来的创建大量String对象的问题。因此,我们首先将二者的执行性能做以简单的比较:

 public static void Main() { #region 性能比较 Stopwatch sw = Stopwatch.StartNew(); //String性能测试 string str = ""; for (int i = 0; i < 10000; i++) str += i.ToString(); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); //StringBuilder性能测试 sw.Reset(); sw.Start(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < 10000; i++) sb.Append(i.ToString()); sw.Stop(); Console.WriteLine(sw.ElapsedMilliseconds); #endregion

} //执行结果 //422 //3

创建同样的字符串过程,执行结果有百倍之多的性能差别,而且这种差别会随着累加次数的增加而增加。因此,基于性能的考虑,我们应该尽可能使用StringBuilder来动态创建字符串,然后以ToString方法将其转换为String对象应用。StringBuilder内部有一个指向Char数值的字段,StringBuilder正是通过操作该字符数组而实现高效的处理机制。 1.构造StringBuilder StringBuilder对象的实例化没有什么特殊可言,与其他对象实例化一样,典型的构造方式为: StringBuilder sb = new StringBuilder("Hello, word.", 20); 其中,第二个参数表示容量,也就是StringBuilder所维护的字符数组的长度,默认为16,可以设定其为合适的长度来避免不必要的垃圾回收;还有一个概念为最大容量,表示字符串所能容纳字符的最大个数,默认为Int32.MaxValue,对象创建时一经设定就不可更改;字符串长度表示当前StringBuilder对象的字符数组长度,可以使用Length属性来获取和设定当前的StringBuilder长度。 2StringBuilder的常用方法

1ToString方法 返回一个StringBuilder中字符数组字段的String,因为不必拷贝字符数组,所以执行效率很高,是最常用的方法之一。不过,值得注意的是,在调用了StringBuilderToString方法之后,都会导致StringBuilder重新分配和创建新的字符数组,因为ToString方法返回的String必须是恒定的。

2Append/AppendFormat方法 用于将文本或者对象字符串添加到当前StringBuilder字符数组中,例如: StringBuilder sbs = new StringBuilder("Hello, "); sbs.Append("Word."); Console.WriteLine(sbs);

//执行结果 //Hello, Word. AppendFormat方法进一步实现了IFormattable接口,可接受IFormatProvider类型参数来实现可格式化的字符串信息,例如:

 StringBuilder formatStr = new StringBuilder("The price is "); formatStr.AppendFormat("{0:C}", 22); formatStr.AppendFormat("\r\nThe Date is {0:D}", DateTime.Now.Date); Console.WriteLine(formatStr);

3Insert方法 用于将文本或字符串对象添加到指定位置,例如: StringBuilder mysb = new StringBuilder("My name XiaoWang"); mysb.Insert(8, "is "); Console.WriteLine(mysb); //执行结果 //My name is XiaoWang 4Replace方法 Replace方法是一种重要的字符串操作方法,用来将字符串数组中的一个字符或字符串替换为另外一个字符或字符串,例如: StringBuilder sb = new StringBuilder("I love game."); sb.Replace("game", ".NET"); Console.WriteLine(sb); //执行结果 //I love .NET. 限于篇幅,我们不再列举其他方法,例如RemoveEqualsAppendLine等,留于读者自己来探索StringBuilder带来的快捷操作。 3.再论性能 StringBuilder有诸多的好处,是否可以代替String呢?基于这个问题我们有如下的对比性分析: