在一个关于将double[][]
格式化为CSV格式的previous question中,it was suggested表示使用StringBuilder
将比使用String.Join
更快.这是真的吗?
在一个关于将double[][]
格式化为CSV格式的previous question中,it was suggested表示使用StringBuilder
将比使用String.Join
更快.这是真的吗?
简短的回答是:这要看情况而定.
答案很长:if you already have an array of strings to concatenate together (with a delimiter), 100 is the fastest way of doing it.
String.Join
可以查看所有字符串,计算出它需要的确切长度,然后再次复制所有数据.这意味着将有no个额外的复制涉及.缺点是,它必须对字符串进行两次判断,这意味着可能会超出必要的次数来 destruct 内存缓存.
如果您事先将字符串作为数组,那么使用StringBuilder
会更快probably,但也会有不使用StringBuilder
的情况.如果使用StringBuilder
意味着大量复制,那么构建一个数组,然后调用String.Join
可能会更快.
编辑:这是一次呼叫String.Join
,而不是一次呼叫StringBuilder.Append
.在最初的问题中,我们有两个不同级别的String.Join
个调用,因此每个嵌套调用都会创建一个中间字符串.换句话说,它更复杂,更难猜测.我会惊讶地发现,在典型数据中,任何一种方式都能显著地"获胜"(从复杂性的Angular 来看).
编辑:当我在家的时候,我会写一个基准,这可能对StringBuilder
人来说是痛苦的.基本上,如果您有一个数组,其中每个元素的大小大约是前一个元素的两倍,并且您做得恰到好处,那么您应该能够强制每个追加(元素的副本,而不是分隔符的副本,尽管这也需要考虑在内).在这一点上,它几乎和简单的字符串连接一样糟糕-但是String.Join
不会有问题.