为什么做到以下这么糟糕?
String val = null;
String someOtherValue = "hello"
val += someOtherValue;
一定很糟糕,但为什么呢?我在我的程序中有这条线,它极大地减慢了一切!
我假设是因为它不断重新创建字符串?这是唯一的原因吗?
答案 0 :(得分:8)
确切的代码非常好;编译器会优化它。
在循环中执行可能会很慢,因为这会为每个连接创建一个单独的(不可变的)string
对象。
相反,请使用StringBuilder
。
答案 1 :(得分:3)
是的,原因是字符串在C#中是不可变的,这意味着它们无法更改。每次执行+ =时,框架都会被强制分配一个新字符串 请尝试使用StringBuilder ..
长循环中差异非常显着
答案 2 :(得分:1)
我认为没有一个条子子弹“这比那更好”。这取决于您需要连接字符串的场景。性能与可读性也是一个问题。有时候,通过妥协性能来编写一个易读的代码会更好。
参考James Michael Hare的article
事实上,连接运算符(+)已经过优化 速度和看起来最干净加入一组已知的 尽可能简单的字符串。
另一方面,StringBuilder在您需要构建时非常出色 字符串不确定长度。当你这样的时候使用它 循环直到你达到停止条件并建立结果 不会引导你错。String.Format似乎比统计数据更宽松,但考虑一下 哪些更强可读。是的,忽略你可以的事实 在DateTime上使用ToString()执行此操作。
看看article,值得一读。