c# 字符串拼接优化 string.concat stringbuilder 的使用和性能

重谈字符串连接性能(上)

这篇文章对于字符串拼接做了详细的说明和测试.

总结如下:

如果你每次要拼接的字符串比较多,就用stringbuilder,

如果你每次拼接的字符串拼接的在5-6个以下,就可以用string.concat.比如

string.concat("1","1","1","1","1")

如果超过5-6个甚至更多的情况下就要用stringbuilder

var sb = new StringBuilder(100);
sb.Append("1");
sb.Append("1");
sb.Append("1");
sb.Append("1");
sb.Append("1");
sb.Append("1");
sb.Append("1");
sb.Append("1");
sb.Append("1");
sb.Append("1");

想sb这种超过10个的拼接会比string.concat快几倍.越多快的越多.

还有一种情况就是内插写法

$"这是要{拼接}的{字符串}"

,内插写法会被编译为两种情况,一种是stringformat,一种是string.concat

如果你的内插写法里的变量是对象,而且你没有显示.ToString(),那么就会被编译为 stringformat,而这是最慢的一种拼接方式!!! 例如:  

$"这是要{对象}的{i}"

如果你换一种写法

$"这是要{对象.ToString()}的{i.ToString()}"

这种就会被编译为string.concat.

上下两种的性能差好几倍!所以要特别注意,

比较坑的是VS会提示你简化去掉ToString(),所以要特别注意!!!!

当然.ToString()需要自己去重载重写

另外 params 关键字也尽可能不要用

一开始我嫌 StringBuilder 每个字符串都要写一行,又臭又长,所以想单独写个方法,然后传字符串进去,那这就要用到 params 关键字.


		private string BuildeString(params string[] str)
        {
			foreach(var s in str)
				SB.Append(s);
			return SB.ToString();
        }

但用了params之后就跟concat没什么区别了,因为concat就是用的params关键字来实现任意数量参数的.而直接 Append 才是最快的,当然写起来会很难看,因为一段完整的字符串可能会被拆分为十几行.例如:

var sb = new StringBuilder(100);
sb.Append("这是");
sb.Append(对象.ToString());
sb.Append("的");
sb.Append(字符串变量);
sb.Append("拼接结果");

所以具体用concat还是StringBuilder就看项目具体情况自己取舍了.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值