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 ) 方法
描述:从startpos到count-1之间用newchar替换oldchar。
Replace( String oldstring,String newstring,Int startpos,Int count ) 方法
描述:从startpos到count-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("
| |||||
| ");
sb.Append("
| |||||
return sb.ToString();
}


");