将字符串添加到另一个字符串时性能更高效?性能StringBuilder插入字符串与字符串Concat
使用StringBuilder.Insert方法或string.Concat方法?
messageString.Insert(0, prependedString);
或
string.Concat(prependedString, messageString);
在我的情况下,消息字符串是比较大的,预谋串短。
将字符串添加到另一个字符串时性能更高效?性能StringBuilder插入字符串与字符串Concat
使用StringBuilder.Insert方法或string.Concat方法?
messageString.Insert(0, prependedString);
或
string.Concat(prependedString, messageString);
在我的情况下,消息字符串是比较大的,预谋串短。
string.Concat
是项目数量固定的最快方法。这种说法在所有情况下均适用。无论弦是多长时间都没关系。
string.Concat
计算最终的字符串大小,然后将这些位复制到新分配的字符串中。它不能做得更快。
事实上,你应该写a + b
而不是调用Concat
(如果在特定情况下可能)。
巨额字符串使用字符串生成器
假。为什么会这样?!
如果你concating超过两个字符串使用StringBuilder
假。如果号码是固定的,请使用Concat。 StringBuilder只会增加你的开销。
的答案取决于你有多少字符串连接,以及他们有多大
假。我上面描述的算法始终是最快的解决方案。
围绕StringBuilder的神话是一个惊人的变化。如果你明白这两个选项如何在内部工作,你可以自己回答所有这些问题。我没有学习和记忆所有这些答案。我从我对内部的理解中产生它们。
我同意你所说的一切,但为了避免任何误解,我们*应该在频繁突变字符串时使用'StringBuilder',对吗?出于记忆的原因,如果没有别的。 –
@Asad你不能改变一个字符串,所以我假设你是指一个临时字符串的动态操作数。那么,StringBuilder通常是正确的选择。我觉得这在实践中是非常罕见的。这种情况经常发生的唯一情况是连接某种序列。我们有string.Join为此。 – usr
您将(非常模糊)的问题限制在一个非常有限的情况下 - 不仅仅是固定字符串,而是编译时已知的数字。性能不仅仅是关于时钟的时间,还是单个操作的执行速度。 –
这是How to use StringBuilder Wisely重复,你可以阅读我完整的答案在那里,总之:
Concat
功能比StringBuilder
工作进入功能被称为串的数量要快。
巨大的字符串使用字符串生成器。否则就是一个正常的concat(与'+'运算符相同)。 –
如果您在两个以上的字符串中使用StringBuilder。 – Bauss
@Bauss多数民众赞成在效率不高。 stringbuilder比普通的concat需要更多的时间来实例化。 –