【发布时间】:2014-01-26 06:06:42
【问题描述】:
我想生成用于测试目的的大型 xml 文件,但我最终得到的代码真的很慢,时间随着我写入文件的行数呈指数增长。下面的示例显示写入 100 行需要几毫秒,但写入 1000 行需要 20 多秒(在我的机器上)。我真的不知道是什么让这变慢了,因为我认为写 1000 行不应该花那么长时间。此外,写入 200 行所需的时间大约是写入 100 行的 4 倍,这并不好。要运行代码,您可能需要更改 StreamWriter 的路径。
open System.IO
open System.Diagnostics
let xmlSeq = Seq.initInfinite (fun index -> sprintf "<author><name>name%d</name><age>%d</age><books><book>book%d</book></books></author>" index index index)
let createFile (seq: string seq) numberToTake fileName =
use streamWriter = new StreamWriter("C:\\tmp\\FSharpXmlTest\\FSharpXmlTest\\" + fileName, false)
streamWriter.WriteLine("<startTag>")
let rec internalWriter (seq: string seq) (sw:StreamWriter) i (endTag:string) =
match i with
| 0 -> (sw.WriteLine(Seq.head seq);
sw.WriteLine(endTag))
| _ -> (sw.WriteLine(Seq.head seq);
internalWriter (Seq.skip 1 seq) sw (i-1) endTag)
internalWriter seq streamWriter numberToTake "</startTag>"
let funcTimer fn =
let stopWatch = Stopwatch.StartNew()
printfn "Timing started"
fn()
stopWatch.Stop()
printfn "Time elased: %A" stopWatch.Elapsed
(funcTimer (fun () -> createFile xmlSeq 100 "file100.xml"))
(funcTimer (fun () -> createFile xmlSeq 1000 "file1000.xml"))
【问题讨论】:
标签: f#