string - 优化 F# 字符串连接

标签 string optimization f#

我正在构建一个 MySql 查询,一次批量插入 4096 条记录。实际插入速度相当快,但瓶颈是生成查询。关于优化这个的任何提示?字符串生成目前比查询长大约 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))
                    )

最佳答案

尝试使用 StringBuilder.AppendFormat 而不是 Printf.bprintf 。当我在我的问题示例中进行此更改时,我看到了巨大的性能提升(~80 倍)。

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
)

关于string - 优化 F# 字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1025775/

相关文章:

ios - 使用 NSMutableAttributedString 后,UILabel 中的 numberOfLines 不工作

ruby - Ruby 中的字符串插值不起作用?

Java 字符串碎片

php - 关闭字符串中打开的 HTML 标记

SQL:基于聚合函数过滤组

Javascript 改进代码 switch 语句

c++ - 用一个 int 替换多个 bool 并使用位掩码的性能优势?

c# - 如何避免从 F# 库返回 Task<Microsoft.FSharp.Core.Unit>

parsing - 为什么我的递归 FParsec 解析器在解析嵌套数组时会抛出异常?

F# 转换为文字运行时提供的类型