【发布时间】:2010-09-06 11:18:26
【问题描述】:
连接字符串最有效的方法是什么?
【问题讨论】:
-
我想在这里提出一个突出的警告,即接受的答案明显不完整,因为它没有讨论所有相关案例。
-
@usr 确实...更多关于
StringBuilder使用案例的详细信息可以在here找到。 -
从 C# 6 开始,我最喜欢的新内容是 $"Constant text here {foo} and {bar}"... 这就像
String.Format使用类固醇。在性能方面,在一个班轮上比+和String.Concat慢一点,但在多次调用时比那些要好得多,尽管比StringBuilder慢。实际上,性能差异是这样的,如果我只能选择一种连接方式,我会选择使用$的字符串插值...如果有两种方式,则将StringBuilder添加到我的工具箱中。有了这两种方式,你就做好了。 -
下面的
String.Join答案不符合+的正义,实际上是一种连接字符串的坏方法,但它在性能方面却出奇地快。答案为什么很有趣。String.Concat和String.Join都可以作用于数组,但String.Join实际上更快。显然,String.Join比String.Concat更加复杂和优化,部分原因是它的操作类似于StringBuilder,因为它首先计算字符串长度,然后使用 UnSafeCharBuffer 构造受益于该知识的字符串。 -
好的,所以它很快,但是
String.Join还需要构造一个看起来资源效率低下的数组,对吧?...结果+和String.Concat无论如何都会为它们的成分构造数组。因此,手动创建一个数组并将其提供给String.Join会相对更快......但是,StringBuilder在几乎所有实际方面仍然优于String.Join,而$在长字符串上只是稍微慢一点,而且快得多......不是提到如果你必须在现场为它创建一个数组,那么使用String.Join会很尴尬和丑陋。
标签: c# .net string optimization