Есть ли быстрый способ преобразовать различимые союзы в строки?
Я пытался понять, почему требуются часы для сохранения больших коллекций записей в CSV-файлах с использованием различных методов.Я пробовал CsvProvider.Save, sprintf, построитель строк и т. Д., И все они были очень медленными.Я думаю, что я проследил проблему до различного преобразования типа объединения.
Мой пример ниже иллюстрирует проблему.Есть ли лучший способ, или мой "ручной перевод" лучший вариант.
#time
open System
type Field = | Ying | Yang
let manual = function | Ying -> "Ying" | Yang -> "Yang"
// Discriminated Union versions
[for i = 0 to 100000 do yield (Ying).ToString()] |> ignore
//Real: 00:00:12.963, CPU: 00:00:13.281, GC gen0: 10, gen1: 0, gen2: 0
[for i = 0 to 100000 do yield (Ying) |> manual] |> ignore
//Real: 00:00:00.004, CPU: 00:00:00.015, GC gen0: 0, gen1: 0, gen2: 0
// Others for comparison
[for i = 0 to 100000 do yield (1).ToString()] |> ignore
//Real: 00:00:00.011, CPU: 00:00:00.015, GC gen0: 0, gen1: 0, gen2: 0
[for i = 0 to 100000 do yield (1.0).ToString()] |> ignore
//Real: 00:00:00.054, CPU: 00:00:00.062, GC gen0: 0, gen1: 0, gen2: 0
[for i = 0 to 100000 do yield (1.0m).ToString()] |> ignore
//Real: 00:00:00.014, CPU: 00:00:00.015, GC gen0: 0, gen1: 0, gen2: 0