C#学习笔记_StringBuilder+程序效率测试

String问题:当程序中进行过多字符串处理操作时,会在内存中产生过多垃圾信息,影响程序效率。

StringBuilder简介

StringBuilder为一个类,属于引用类型。StringBuilder与string的区别在于,StringBuilder对于字符串的操作,总是在同一内存空间实现,不会产生垃圾数据,执行效率更高。

使用方法

一、创建对象

下面使用变量sb进行演示:

cs 复制代码
StringBuilder sb=new StringBuilder();    //创建StringBuilder变量sb

注意,使用StringBuilder需要依赖System.Text命名空间。

二、向sb追加数据

此时会需要两个函数:

  1. sb.Append(i):向sb中追加数据;
  2. sb.ToString():将sb转换为字符串。

使用上面的sb,对其进行操作:

cs 复制代码
//向sb中追加数据
sb.Append("StringBuilder");
sb.Append(1234);
sb.Append(false);
sb.Append(1.23);
for (int i = 0; i < 5; i++) sb.Append(i);   //使用循环追加数据
//将sb转换为字符串后输出
Console.WriteLine("输出"+sb.ToString());   //输出StringBuilder1234False1.2301234

可见,追加数据,即将对应数据以类似字符串形式添加在原有数据之后。实际Append有多种重载,可以添加很多数据类型。

借助于ToString,即可将sb以字符串形式输出。

三、清空sb

清空sb使用函数Clear。

cs 复制代码
//清空sb
sb.Clear();
Console.WriteLine("此时无sb输出" + sb.ToString());   //此时无sb输出

四、插入数据

使用Insert方法可以向sb中选定位置插入数据。假设上面sb未被清空:

cs 复制代码
//插入数据
sb.Insert(6, "Insert");     //在索引值为6的字符前插入字符串"Insert"
Console.WriteLine("插入后sb输出:" + sb.ToString());  
//插入后sb输出:StringInsertBuilder1234False1.2301234

五、删除子字符串

通过Remove方法,可以将选定索引之后的一定长度子字符串删除。

cs 复制代码
//删除子字符串
sb.Remove(6, 6);    //从索引值为6的字符开始,删除6字符长度的子字符串
sb.Remove(13,18);  
//两参数必须完整,不能认为只填写前一个参数即可清空选定位置后全部字符串
Console.WriteLine("输出" + sb.ToString());   //输出StringBuilder

测试效率

测试效率可以通过程序执行时间参考。程序执行时间测量,需要使用Stopwatch类,该类型依赖于System.Diagnostics命名空间。

使用Stopwatch类,一般通过如下操作测量时间:

  1. Stopwatch sw = new Stopwatch()可创建Stopwatch类变量;
  2. sw.Start()开始计时;
  3. sw.Stop()结束计时;
  4. sw.Elapsed表示开始到结束的时长,输出格式为"时:分:秒.小数后7位"。

现在尝试分别向string与StringBuilder类追加5万条字符串,测量代码实例:

cs 复制代码
//创建Stopwatch变量
Stopwatch sw1 = new Stopwatch();
Stopwatch sw2 = new Stopwatch();

//string类测试追加效率
string s = "";
sw1.Start();
for(int i = 0; i < 50000; i++)
{
    s += "addString";
}
sw1.Stop();
Console.WriteLine("string类追加5万字符串用时为" + sw1.Elapsed);

//StringBuilder类测试追加效率
StringBuilder sb = new StringBuilder();
sw2.Start();
for (int i = 0; i < 50000; i++)
{
    sb.Append("addString");    
}
sw2.Stop();
Console.WriteLine("StringBuilder类追加5万字符串用时为" + sw2.Elapsed);

观察输出结果:

string类追加5万字符串用时为00:00:05.3519927

StringBuilder类追加5万字符串用时为00:00:00.0007908

对比可见,StringBuilder类效率远超string类。

本段代码实际也是一段程序效率测试的实例,在程序效率测试方面也可以进行参考。

相关推荐
虾球xz21 分钟前
游戏引擎学习第55天
学习·游戏引擎
oneouto37 分钟前
selenium学习笔记(二)
笔记·学习·selenium
sealaugh3242 分钟前
aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发
笔记·学习·aws
炭烤玛卡巴卡1 小时前
学习postman工具使用
学习·测试工具·postman
thesky1234562 小时前
活着就好20241224
学习·算法
蜗牛hb2 小时前
VMware Workstation虚拟机网络模式
开发语言·学习·php
汤姆和杰瑞在瑞士吃糯米粑粑2 小时前
【C++学习篇】AVL树
开发语言·c++·学习
虾球xz2 小时前
游戏引擎学习第58天
学习·游戏引擎
LuH11242 小时前
【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo
论文阅读·笔记
奶香臭豆腐3 小时前
C++ —— 模板类具体化
开发语言·c++·学习