F#交互比编译快

标签 f# f#-interactive

我最近注意到 F# Interactive 比编译版本(在发布或 Debug模式下)快得多。下面是一个例子:

let rec fib n = if n < 3 then 1 else fib (n-1) + fib (n-2)

[<EntryPoint>]
let rec main argv = 
    let w = System.Diagnostics.Stopwatch()
    w.Start()
    fib 45
    w.Stop()
    printfn "%d" w.ElapsedMilliseconds
    System.Console.ReadLine()
    0

在 Release模式下编译时,然后运行此输出“12784”,在 F# Interactive 中运行时,它输出“4986”。我使用“main [||];;”在交互模式下运行它。

肯定会发生一些奇怪的事情,但我不知道是什么!

编辑 [规范]:适用于 .NET 4 的 F# 3.0。优化代码和生成尾调用标志已设置,我正在为 x86 进行编译。我在 i7 950 上运行它。我使用的是 Visual Studio 2012。

最佳答案

按照 pad 的建议在 VS2012 之外运行可执行文件,然后更改为 .NET 4.5。这使运行时间相等。

关于F#交互比编译快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581266/

相关文章:

f# - 在类型中定义选项的正确方法

f# - PSeq 是在 F# 3.0 中使用的正确方法吗?

f# - 在 F# 中适当使用事件模式

.NET 优化埃拉托色尼 F# 筛法

F# - 在 F# 交互窗口中显示完整结果

F# FSI,更改工作目录

f# - 禁止在 F# 交互中显示变量的内容

f# - 如何使用 XUnit 2.0 和 FSharp 样式测试捕获输出

f# - Stackless trampoline Monad/计算表达式

f# - 将此 F# 代码重构为尾递归