c#中stringbuilder的使用
https://www.cnblogs.com/tonysuen/archive/2010/03/04/1678447.html
String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。
那么性能提升多少呢?
测试代码如下
private void button1_Click(object sender, EventArgs e)
{
Console.WriteLine("string");
DateTime dt1 = DateTime.Now;
Console.WriteLine(dt1.ToString());
string str = "";
for( int i = 0; i < 50000; i++)
{
str += i.ToString();
}
DateTime dt2 = DateTime.Now;
Console.WriteLine(dt2.ToString());
TimeSpan timeSpan = dt2 - dt1;
Console.WriteLine(timeSpan.TotalSeconds.ToString());
}
private void button2_Click(object sender, EventArgs e)
{
Console.WriteLine("StringBuilder");
DateTime dt1 = DateTime.Now;
Console.WriteLine(dt1.ToString());
StringBuilder builder = new StringBuilder(10);
for (int i = 1; i < 50000; i++)
{
builder.Append(i);
}
DateTime dt2 = DateTime.Now;
Console.WriteLine(dt2.ToString());
TimeSpan timeSpan = dt2 - dt1;
Console.WriteLine(timeSpan.TotalSeconds.ToString());
}
性能对比结果如下
测试环境vs2022 win10
可以观察循环5万次到速度相差 750倍,如果循环次数再次提升相差倍数更大。
因此适合于进行数据输出是拼接字符串。
特此记录
anlog
2022年9月3日
参考链接
浅谈VB6字符串拼接效率_vb6 字符串连接效率-CSDN博客https://blog.csdn.net/qq_35844043/article/details/102865760特此记录
anlog
2024年4月9日