C#的字符串操作方法性能比较
来源:互联网 发布:全民tv怎么没人了 知乎 编辑:程序博客网 时间:2024/05/16 04:04
一、C#字符串连接方式
C#有多种连接字符串的方式,如下所示:
1. +
例如,
string s1 = "123", s2 = "abc";
string s3 = s1 + s2; //s3为"123abc"
2. $
例如,
string s4 = "456", s5 = "def";
string s6 = $"{s4}{s5}" ; //s6为"456def"
3. StringBuilder
例如,
string s7 = "789", s8 = "ghi";
StringBuilder b1 = new StringBuilder();
b1.Append(s7);
b1.Append(s8);
string s9 = b1.ToString(); //s9为"789ghi"
4. 其他的方法,如string.Concat、string.Format等等,因为使用起来略显不便,就不再提了。
在上述方法中,比较常见的是前3种。
“+”的方法,操作简单直观,敲键盘次数少,在字符串个数较少、操作频率低的时候,可以优先选用。由于字符串是不可变的,所以在具体执行连接时,编译器会生成一些临时字符串,从而降低效率。另外,“+”操作符的两边都必须是字符串,而不能有整数或其他类型的数据,所以如果要连接一个整数和一个字符串,恐怕敲键盘的次数就要多一些,例如:string s = 123.ToString() + "abc"。
“$”的方法,操作简单直观,敲键盘次数少,在字符串个数较少、操作频率低的时候,可以优先选用。与“+”类似,在具体执行连接时,编译器会生成一些临时字符串,从而降低效率。与“+”不同的是,"$"可以连接不同的数据类型,例如:
int a = 123; double f = 456;string s10="abc";
string s11 = $"{a}+{f}很方便吧{s10}"; //s11为"123+456很方便吧abc"
由于这种特性,使得"$"操作方法深受程序员的喜爱。不过,这种便捷性牺牲了部分性能,编译器在背后需要做一些类型转换操作。
StringBuilder的内部字符串是可变的,当容纳不下的时候,它会扩大容量,因此在字符串比较多、操作频繁、性能要求比较高的时候,可以考虑这种方法。不过,相比“+”、"$"操作方法,StringBuilder需要较多的敲键盘次数。
二、“+”、"$"和StringBuilder三种方法比较
从操作时间和对内存的使用情况,对三种方法进行比较。计算时间时,可以使用System.Diagnostics中的Stopwatch进行计时。计算内存时,则可以使用System.Diagnostics中的性能组件PerformanceCounter。详情可参考代码。
操作步骤为:1)给出一段文本和循环次数;2)调用GC.Collect()进行垃圾回收;3)统计期初内存使用情况;4)使用某种连接方法进行连接;5)统计期末内存使用情况;6)计算差值。
比较结果:
由上面的截图可以看出,对字符串“查找所有应用程序标题”连接50000次,“+”所用时间为12秒、所用内存为12MB,"$"方法所用时间为25秒、所用内存为7MB,StringBuilder方法所用时间为4毫秒,所用内存为1MB,可见,从时间上来看,“$”方法最差,StringBuilder最好,二者相差6000倍;从内存上看,"+"方法最差,StringBuilder方法最好,二者相差12倍。
结论:在字符串较小、使用频率很低的场合,使用“+”或"$"都行,如果连接的数据类型都是字符串,则推荐用"+",如果有多种类型,则推荐用"$";在字符串连接频繁的场合,例如循环内部连接字符串,则推荐使用StringBuilder。
文章和代码完全原创,错误之处在所难免,请指正。可以去本人的贡献资源里下载代码。
- C#的字符串操作方法性能比较
- C#的字符串常用的操作方法
- C#的字符串常用的操作方法
- C#的字符串常用的操作方法
- C#一些字符串操作方法
- C#字符串的比较
- 字符串的操作方法
- jacascript字符串的操作方法
- 字符串的操作方法
- C#的DataTable操作方法
- c#中的字符串的比较
- C#中字符串的比较
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- (转)判断一个字符串是否全是数字的多种方法及其性能比较(C#实现
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- generic operation system : process
- 编程中的Json
- Spark日志分析项目Demo(8)--SparkStream,广告点击流量实时统计
- C语言中返回错误信息的相关函数用法总结定义函数
- Moment.js
- C#的字符串操作方法性能比较
- python里使用事件对象asyncio.Event来同步协程
- 抓包神器Charles使用教程(一) 安装设置与界面
- redis 键管理
- Python 边做边学 N.1 成果展示--用户区域统计
- 虚函数表以及单继承多继承对象模型
- spring基础概念AOP与动态代理理解
- MVC开发模式
- 2017.9.9独木舟上的旅行(贪心)