DU有很多非常有用的方面,包括內置漂亮打印。然而,我很驚訝我簡單的ToString函數使得格式化DU的速度提高了1000倍以上。我錯過了什麼嗎?什麼是sprintf "%A"
比我的ToString函數做得更多?F#,辨別聯盟中的sprintf「%A」的性能
type XYZ =
|X of float
|Y of float*float
|Z
let ar = // some test Array
[| for i in 1..3000 do for a in [ X(1.) ; Y(2.,3.) ; Z ] do yield a |]
let xyzToString (x:XYZ) =
match x with
|X (a) -> sprintf "X %.1f" a
|Y (a,b)-> sprintf "Y (%.1f,%.1f)" a b
|Z -> "Z"
#time
ar|> Array.map (fun x -> sprintf "%s" (xyzToString x)) // about 15 ms
ar|> Array.map (fun x -> sprintf "%A" x) // about 4000 ms
相關:http://fsharpnews.blogspot.co .at/2012/01/fast-generic-pretty-printing.html – Goswin
很多解析...並且它與DU無關,但與'sprintf'的工作方式 – Carsten