为什么val + = someOtherValue如此糟糕?

时间:2012-03-26 04:17:31

标签: c#

为什么做到以下这么糟糕?

String val = null; 
String someOtherValue = "hello" 

val += someOtherValue;

一定很糟糕,但为什么呢?我在我的程序中有这条线,它极大地减慢了一切!

我假设是因为它不断重新创建字符串?这是唯一的原因吗?

3 个答案:

答案 0 :(得分:8)

确切的代码非常好;编译器会优化它。

在循环中执行可能会很慢,因为这会为每个连接创建一个单独的(不可变的)string对象。

相反,请使用StringBuilder

答案 1 :(得分:3)

是的,原因是字符串在C#中是不可变的,这意味着它们无法更改。每次执行+ =时,框架都会被强制分配一个新字符串 请尝试使用StringBuilder ..

长循环中差异非常显着

答案 2 :(得分:1)

我认为没有一个条子子弹“这比那更好”。这取决于您需要连接字符串的场景。性能与可读性也是一个问题。有时候,通过妥协性能来编写一个易读的代码会更好。

参考James Michael Hare的article

  

事实上,连接运算符(+)已经过优化   速度和看起来最干净加入一组已知的   尽可能简单的字符串。

     另一方面,StringBuilder在您需要构建时非常出色   字符串不确定长度。当你这样的时候使用它   循环直到你达到停止条件并建立结果   不会引导你错。

     

String.Format似乎比统计数据更宽松,但考虑一下   哪些更强可读。是的,忽略你可以的事实   在DateTime上使用ToString()执行此操作。

看看article,值得一读。