1、System.String具有以下特点
String对象一旦生成,就不可改变,又因为String对象在运算时会产生一个新的实例,所以
在某些情况下,例如在循环中改变字符串的值,将会产生非常多的中间对象,这些中间对象将导致存储浪费和效率降低。
2、StringBuilding具有以下特点。
StringBuilding对象是一种可变字符串,可以在不创建新的对象的情况下改变字符串值,包括追加,修改,删除等操作。
因此效率较高
3.StringBuilding和String类对比,String值的每次追加操作都会分配新的内存,而StriingBuilder仅当StringBuilder的缓冲区太小以至于无法容纳新数据时才分配内存。因此,当字符串的追加操作不多时,最好还是用string类,但如果需要任意对此追加字符串,例如在一个循环中,使用StringBuilder类比使用String性能更高。尽管StringBuilder有诸多好处,但创建一个Stringbuilder实例比创建一个String实例需要花费更多的内存资源,因此使用StringBuilder也要讲场合。
下面是一些测试:
//测试string的不变性 string str = "aaaaa";
string strNew = str.Replace("a","b");
Console.WriteLine("str的值为:"+str);
Console.WriteLine("StrNew的值:"+strNew);
//测试stringbuilder的可变性
StringBuilder sb = new StringBuilder();
sb.Append("aaaaa");
StringBuilder sbNew = new StringBuilder();
sbNew= sb.Replace("a","b");
Console.WriteLine("sb的值"+sb.ToString());
Console.WriteLine("sbNew的值" + sbNew.ToString());
//测试string所用时间
TestString();
测试string拼接字符串所用时间
TestStringBuilder();
/// <summary>
/// 测试string拼接字符串所用时间
/// </summary>
void TestString()
{
string str = "";
DateTime dtBegin = DateTime.Now;
for (int i = 0; i < 10000;i++ )
{
str += DateTime.Now;
}
Console.WriteLine("str循环10000所用毫秒数:" + DateTime.Now.Subtract(dtBegin).TotalMilliseconds);
}
//测试StringBuilder拼接字符串所用时间
void TestStringBuilder()
{
StringBuilder sb = new StringBuilder();
DateTime dtBegin = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
sb.Append(DateTime.Now.ToString());
}
Console.WriteLine("sb循环10000所用毫秒数:" + DateTime.Now.Subtract(dtBegin).TotalMilliseconds);
}
|