为什么做得如此糟糕?为什么val + = someOtherValue如此糟糕?
String val = null;
String someOtherValue = "hello"
val += someOtherValue;
它一定很坏,但为什么呢?我的程序中有这条线,它极大地减缓了一切!
我假设这是因为它不断重新创建字符串?这是唯一的原因吗?
为什么做得如此糟糕?为什么val + = someOtherValue如此糟糕?
String val = null;
String someOtherValue = "hello"
val += someOtherValue;
它一定很坏,但为什么呢?我的程序中有这条线,它极大地减缓了一切!
我假设这是因为它不断重新创建字符串?这是唯一的原因吗?
是的,原因是字符串在C#中是不可变的,这意味着它们不能被改变。该框架被强制每次你做一次分配一个新的字符串+ = 尝试使用StringBuilder的,而不是..
所不同的是在长期循环非常明显
我不认为有一个银色子弹“这比这更好”。这取决于您需要连接字符串的场景。性能与可读性在这里也是一个问题。有时候最好通过在性能上做一些妥协来编写一个可读性很好的代码。
参照的article从詹姆斯迈克尔野兔
的事实,则concattenation运算符(+)已被用于 速度优化,并看起来干净在接合在一起一组已知 串最简单的方式。
另一方面,StringBuilder在您需要构建 字符串的不确定长度时很出色。当你在 循环时,使用它,直到你达到停止条件,并建立一个结果,它不会误导你。
String.Format似乎是从统计数据中松散,但考虑 其中哪些更可读。是的,忽略这样一个事实,即您可以使用DateStyle上的ToString()来执行此操作。
看一看article,值得一看。
谢谢,这个答案真的帮助:) – BigBug 2012-03-26 06:52:32
“非常”多少?你执行过多少次(循环)?如果您不*附加'someOtherValue',您的程序是否会有不同的操作? – 2012-03-26 04:19:23
你是如何确定它是唯一会减慢程序速度的东西? – krammer 2012-03-26 04:20:24
到一切都冻结了!我正在解析图像中的值,因此对于图像中的每个像素(3个字节大),我追加了一个单独的值。我追加的值的大小是每次1字节大...我改为使用列表,现在它不冻结。 – BigBug 2012-03-26 04:21:41