C#中string和StringBuilder的选择
2010-07-11 14:26:54     我来说两句 
大]

很多地方都讲,在做字符串拼接的时候StringBuilder比string快,并且快得多。

事实是,StringBuilder比string快的原因是string拼接时产生了中间对象,最终是垃圾。
如:
string str = "a";
str += "b";
str += "c";
那么,最终结果是"abc",但第二行产生了"ab"只是一个中间对象,是个垃圾。用StringBuilder会避免这种中间对象的产生。

那如果我这么写呢?
string str = "a"
    + "b"
    + "c";

这会比StringBuilder慢吗?绝对不会!
且不说这种常量的字符串拼接会在编译时就进行处理,就算"b"和"c"这里不是常量是变量,那么编译结果也是string.concat(...),不会产生中间对象。

当然,这样把多个语句变成了一个语句,有个缺点就是调试的时候没那么方便。

不是所有时候都可以方便的转换成连加,比如遇到if、while等语句块时。

用StringBuilder的目的是为了不产生中间变量,但如果这么用:
stringbuilder.Append("a"+str1+"b"),就还是产生了中间变量:"a"+str1+"b",应该改成
stringbuilder.Append("a").Append(str1).Append("b"),性能会更好,但可读性就差点了。

我的结论:可以转换成一句string连加的StringBuilder操作,用连加更好。但尽量减少+=。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-25
  • 2021-09-14
猜你喜欢
  • 2021-07-30
  • 2021-11-30
  • 2021-09-23
  • 2021-06-21
  • 2021-09-18
  • 2021-10-10
  • 2022-12-23
相关资源
相似解决方案