C#基础5.1:StringBuilder和StopWatch类

本文通过代码示例,详细对比了StringBuilder与string在大量字符串拼接操作时的性能表现,使用Stopwatch类准确测量了两种方式的时间消耗,揭示了StringBuilder在频繁字符串操作中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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:输出时长
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值