使用StringBuilder 比使用String 来组合连接字符串更加有效率

通常我们使用“+”操作符来组合字符串,这样十分方便。但是这样并不是十分有效率,因为每次组合成的新字符串都需要重新开一片内存空间存储。

下面我们做一个简单的测试,将50000个整数组合成字符串:

string s1 = "";
for (int i = 0; i < 50000; i++)
    s1 = s1 + i.ToString();

在测试环境张,这个循环花费了30430毫秒。

如果我们使用StringBuilder 类的Append 方法,就不必为每次组合成的字符串开辟新的内存空间:

StringBuilder sb = new StringBuilder("");
for (int i = 0; i < 50000; i++)
    sb.Append(i.ToString());

在同样的环境中测试,只花费了6毫秒。

StringBuilder 很明显的更加有效率,但是只是在进行大数据处理的时候有效。在只组合很少字符串的情况下,效率反而不如直接组合。具体原因可以查看这篇文章Concatenating Strings Efficiently.我总结它给出的原因为:

1. 在组合少量字符串的情况下使用StringBuilder 的代码阅读性差;

2. 也是主要原因,StringBuilder 虽然不会每次都为组合产生字符串开辟内存空间,但是它必须维护一个自己buffer,保存每次组合后的结果。但是StringBuilder 事先并不知道组合产生的中间字符串需要多大的buffer,因此理论上它要一个比产生字符串所需内存大buffer,如果不够则会自动增长。相比而言,在组合少量字符串的情况下,维护这个buffer的成本反而更高。

原文地址:https://csharp.2000things.com/2010/08/19/63-use-stringbuilder-for-more-efficient-string-concatentation/


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值