2015-09-25 73 views
4

将字符串添加到另一个字符串时性能更高效?性能StringBuilder插入字符串与字符串Concat

使用StringBuilder.Insert方法或string.Concat方法?

messageString.Insert(0, prependedString); 

string.Concat(prependedString, messageString); 

在我的情况下,消息字符串是比较大的,预谋串短。

+0

巨大的字符串使用字符串生成器。否则就是一个正常的concat(与'+'运算符相同)。 –

+3

如果您在两个以上的字符串中使用StringBuilder。 – Bauss

+0

@Bauss多数民众赞成在效率不高。 stringbuilder比普通的concat需要更多的时间来实例化。 –

回答

6

string.Concat是项目数量固定的最快方法。这种说法在所有情况下均适用。无论弦是多长时间都没关系。

string.Concat计算最终的字符串大小,然后将这些位复制到新分配的字符串中。它不能做得更快。

事实上,你应该写a + b而不是调用Concat(如果在特定情况下可能)。

巨额字符串使用字符串生成器

假。为什么会这样?!

如果你concating超过两个字符串使用StringBuilder

假。如果号码是固定的,请使用Concat。 StringBuilder只会增加你的开销。

的答案取决于你有多少字符串连接,以及他们有多大

假。我上面描述的算法始终是最快的解决方案。

围绕StringBuilder的神话是一个惊人的变化。如果你明白这两个选项如何在内部工作,你可以自己回答所有这些问题。我没有学习和记忆所有这些答案。我从我对内部的理解中产生它们。

+0

我同意你所说的一切,但为了避免任何误解,我们*应该在频繁突变字符串时使用'StringBuilder',对吗?出于记忆的原因,如果没有别的。 –

+0

@Asad你不能改变一个字符串,所以我假设你是指一个临时字符串的动态操作数。那么,StringBuilder通常是正确的选择。我觉得这在实践中是非常罕见的。这种情况经常发生的唯一情况是连接某种序列。我们有string.Join为此。 – usr

+0

您将(非常模糊)的问题限制在一个非常有限的情况下 - 不仅仅是固定字符串,而是编译时已知的数字。性能不仅仅是关于时钟的时间,还是单个操作的执行速度。 –

3

这是How to use StringBuilder Wisely重复,你可以阅读我完整的答案在那里,总之:

Concat功能比StringBuilder工作进入功能被称为串的数量要快。

+1

感谢上帝,有人就此写了一个很好的答案。欢迎来到堆栈溢出,顺便说一句! – usr

+0

谢谢,我不是新的^^; –

+0

但是你最近才开始回答大量的问题。我注意到了。 – usr