PS:代码中有注释和讲解
为什么需要用到StringBuilder?
- 当需要对一个字符串变量重复赋值时,在内存中会产生大量的垃圾数据信息
- 这是因为string是定义在堆上的,而在栈上有一个指向当前字符串的指针,如果重新对当前字符串赋值,那么它并不会在原串上进行修改,而是在堆上重新开辟一个新空间存储修改后的新字符串,并让栈上的指针重新指向它
- 也就是说:对string多次操作,时间效率低,空间浪费严重
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; //StringBuilder类的命名空间
using System.Threading.Tasks;
using System.Diagnostics; //Stopwatch类的命名空间
namespace C4_程序设计
{
class StringBuilder和StopWatch类
{
static void Main()
{
StringBuilder sb = new StringBuilder(); //定义StringBuilder类
sb.Append("one");
sb.Append(11017); //相当于字符串连接
sb.Append(true);
Console.WriteLine(sb.ToString()); //输出结果:one11017True
sb.Clear();
Console.WriteLine(sb.ToString()); //输出结果为空字符
Stopwatch tim = new Stopwatch(); //计时器,用于程序运行计时
tim.Start(); //计时器开始
for (int i = 0; i <= 10000; i++)
sb.Append(i);
tim.Stop(); //计时器结束
Console.WriteLine(tim.Elapsed); //00:00:00.0016064,此为StringBuilder()追加耗时
string str = "";
tim.Start();
for (int i = 0; i <= 10000; i++)
str += i;
tim.Stop();
Console.WriteLine(tim.Elapsed); //00:00:00.0581941,此为string追加耗时
//tim.Elapser:输出时长
}
}
}