优化F#字符串连接

Mik*_*keW 4 string optimization f#

我正在构建一个批处理插入4096条记录的MySql查询.实际插入非常快,但瓶颈是生成查询.优化这一点的任何提示?字符串生成目前比查询长约18倍.

                    let builder = StringBuilder(524288)
                    Printf.bprintf builder
                        "
                         INSERT INTO %s
                             (`ID`,
                              `Tag`,
                              `Port`,
                              `Excess`,
                              `Return`,
                              `StartDate`,
                              `EndDate`
                              ) 
                          values "
                        x.evaluationstable

                    evaluations
                    |> Seq.iter(fun (e) ->
                        Printf.bprintf builder 
                            " (%d, '%s', '%s', %A, %A, %A, %A), "
                            e.ID
                            e.Tag
                            e.Port
                            e.Excess
                            e.Return
                            (e.StartDate.ToString(x.datetimeformat))
                            (e.EndDate.ToString(x.datetimeformat))
                    )
Run Code Online (Sandbox Code Playgroud)

Ray*_*gus 10

尝试使用StringBuilder.AppendFormat而不是Printf.bprintf.当我在你的问题的例子中做出这个改变时,我看到了巨大的性能提升(~80x).

evaluations
|> Seq.iter (fun (e) ->
    builder.AppendFormat(
        " ({0}, '{1}', '{2}', {3}, {4}, {5}, {6}), ",
        e.ID,
        e.Tag,
        e.Port,
        e.Excess,
        e.Return,
        (e.StartDate.ToString("MM/dd/yyyy")),
        (e.EndDate.ToString("MM/dd/yyyy"))
    ) |> ignore
)
Run Code Online (Sandbox Code Playgroud)