字符串concat / join性能

时间:2016-04-20 11:47:08

标签: .net string performance f#

我正在处理一个包含5个字符串的数组。并将项目连接成一个大字符串。 x是数组,如下所示:

val x : System.String [] =
  [|"W0SPFR"; "1BUDJY"; "1L1RJV"; "ITBPFA"; "QVUS7N"; "CJ6ZMQ"; "V3HUQ5";
    "694L4U"; "8RYWPF"; "YGWS8U"; "3KEKA9"; "1C9L6Q"; "OXCGSF"; "GF0CUQ";
    "YR41AF"; "4D4U0G"; "1U94T1"; "VUVJI0"; "CTYQL3"; "310XVU"; ...|]

我最初的尝试是:

let y = x |> Array.reduce (fun x y -> x+"-"+y)

不幸的是,即使对于中等大小的阵列(10,000个元素),这也很慢。我希望将其扩展到数百万。

Real: 00:00:00.483, CPU: 00:00:00.577, GC gen0: 167, gen1: 6, gen2: 5

我的第二次尝试更好:

open System.Text  

let buf = new System.Text.StringBuilder()
let z = x |> Array.fold (fun (buf:StringBuilder) x -> buf.Append(x+"-")) buf |> string
z.[0..(z |> Seq.length)-2] = y

问题1

StringBuilder是构建这个大字符串的最快方法吗? 我也愿意并行化。

问题2

因为我在第二次尝试中使用了折叠,-正在加入到最后一项,因此我正在使用z.[0..(z |> Seq.length)-2]来消除它。
有更优雅的方式吗?

0 个答案:

没有答案