String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。

通过用一个重载的构造函数方法初始化变量,可以创建
StringBuilder 类的新实例,

Length的用法:

通过上面的代码,我们可以看出如果StringBuilder 中的字符长度小于Length的值,StringBuilder 将会用空格硬填充StringBuilder ,以满足符合长度的设置..如果StringBuilder 中的字符长度大于Length的值,StringBuilder 将会截取从第一位开始的Length个字符..而忽略超出的部分

Length 属性并不是只读的。

Capacity 属性
描述:当前为实例分配的字符数量。默认容量是16,如果将一个字符串作为参数提供给构造函数,容量以最接近 2 的幂的值。

EnsureCapacity( Int capacity )  方法

描述:如果当前容量小于指定容量,内存分配会增加内存空间以达到指定容量。

MaxCapacity 属性
描述:这个实例中可以被分配的字符最大数量。

Append(  ) 方法
描述:追加给定值的字符串表示。
StringBuilder sb=new StringBuilder( );
Console.WriteLine( sb.Capacity+"\t"+sb.Length );
sb.Append ( 'a' , 17 )
Console.WriteLine( sb.Capacity+"\t"+sb.Length );
16      0 <==
输出
32      17

Replace( Char oldchar,Char newchar )  方法
描述:用newchar替换oldchar

Replace( String oldstring,String newstring ) 方法
描述:用newstring替换oldstring

Replace( Char oldchar,Char newchar,Int  startpos,Int count ) 方法
描述:从startposcount-1之间用newchar替换oldchar

Replace( String oldstring,String newstring,Int startpos,Int count ) 方法
描述:从startposcount-1之间用newstring替换oldstring

ToString( ) 方法
StringBuilder sb=new StringBuilder( "I live this game" );
String s1=sb.ToString( );         //Displays "I live this game"
String s2=sb.ToString(3,4);     //Displays "live"

在修改Capacity的时候,一定要确保Capacity >= Length,否则会引发ArgumentOutOfRangeException异常...看完结果,就可以推断出Capacity的公式:
if ( Capacity < Length && Capacity > 0 ){

      Capacity *= 2;
}
 

StringBuilder是以当前的Capacity*2来扩充的..所以,在使用StringBuilder需要特别注意,尤其是要拼接或追加N多字符的时候,要注意技巧的使用,可以适当的,有预见性的设置Capacity的值,避免造成过大内存的浪费,节约无谓的内存空间..例如,下列代码就可以根据情况自动的扩展,而避免了较大的内存浪费.

在页面显示的内容类似的时候,使用StringBuilder会提高编码的效率。一方面页面的修改只需通过修改一个公共函数即可完成,不用每处都要修改;另一方面,很方便加一些参数,解决了静态页面文件和后台类文件之间传参的许多麻烦。

下面是显示某一栏目头几条新闻的例子:

protected System.Web.UI.WebControls.Literal LiteralJS;

LiteralJS.Text = JSIP.Common.Common.GetTopNews("IT",5);

 

public static string GetTopNews(string moduleName,int rowNumber)

         {

              DataSet ds = new DataSet();

              ds = GetDataSet(moduleName,rowNumber);\\获取相应栏目新闻的DataSet

              DataView DataViewNews = new DataView();

              DataViewNews=ds.Tables["News"].DefaultView;

 

              string content = GetModuleName(moduleName);\\根据模块名获取模块的内容说明

 

              StringBuilder sb = new StringBuilder();  

             

              sb.Append("<table width='100%'  cellpadding='0' cellspacing='0' border='0'>");

              sb.Append("<TR><TD align='left'><TABLE  cellSpacing='0' cellPadding='0' border='0'>");

              sb.Append("<TR><TD width='19'>");

              sb.Append("<IMG height='26' alt='' src='images/common/topic_bg_1.gif' width='19'></TD>");

              sb.Append("<TD vAlign='bottom' background='images/common/topic_bg_2.gif' height='26'>");

              sb.Append("<table width='100%' height='20'  cellpadding='0' cellspacing='0' border='0'>");

              sb.AppendFormat("<TR><TD class='topic-text'><a href='newsall.aspx?moduleName={1}'>{0}</a></TD></TR></TABLE></TD>"

                   ,content

                   ,moduleName);

              sb.Append("<TD width='64'><IMG height='26' alt='' src='images/common/topic_bg_3.gif' width='64'></TD>");

              sb.Append("</TR></TABLE></TD></TR><TR><TD>");

              sb.Append("<TABLE class='table-main'  cellSpacing='1' cellPadding='3' width='100%' border='0'>");

              sb.Append("<TR class='td-main-2'><TD vAlign='top'>");

              sb.Append("<table class='p9line21g' style='MARGIN-BOTTOM: 10px' cellSpacing='0' cellPadding='0' width='100%'  border='0'>");

             

              for(int i=0; i<=rowNumber; i++)

              {

                   if(i >= ds.Tables["News"].Rows.Count)

                       break;

                   int timeTrimer = DataViewNews[i].Row["newstime"].ToString().IndexOf(" ");

                   sb.Append("<tr>");

                   sb.Append("<td width='87%' style='BACKGROUND: url(images/common/news_line2.gif) repeat-x left bottom; HEIGHT: 24px'>");

                   sb.Append("<IMG height='6' src='images/common/news_point.gif' width='24' align='absMiddle'>");

                   sb.AppendFormat("<a href='newsdetail.aspx?newsid={1}'>{0}</a></td>"

                       ,DataViewNews[i].Row["title"].ToString()

                       ,DataViewNews[i].Row["newsid"].ToString());

                   sb.Append("<td width='13%' style='BACKGROUND: url(images/common/news_line2.gif) repeat-x left bottom; HEIGHT: 24px; TEXT-ALIGN: center'>");

                   sb.AppendFormat("{0}</td>"

                       ,DataViewNews[i].Row["newstime"].ToString().Substring(0,timeTrimer)   );

                   sb.Append("</tr>");

              }

 

              sb.AppendFormat("<TR><TD></TD><TD height='15'>&nbsp;&nbsp;<a href ='newsall.aspx?modulename={0}'>"

                   ,moduleName);

              sb.Append("<img  src='images/common/more.gif' >");

              sb.Append("</a></TD></TR>");

              sb.Append("</table></TD></TR></TABLE></TD></TR><TR><TD height='5'></TD></TR></TABLE>");

              return sb.ToString();

         }