我最近注意到F#Interactive比编译版本快得多(在Release或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
在发布模式下编译然后运行此输出“12784”,当在F#Interactive中运行时,它输出“4986”.我使用“main [||] ;;”在交互模式下运行它.
奇怪的是肯定会发生,但我不知道是什么!
编辑[规范]:F#3.0 for .NET 4.优化代码和生成尾调用标志已设置,我正在编译x86.我在i7 950上运行它.我正在使用visual studio 2012.
最佳答案 按照pad的建议,在VS2012之外执行可执行文件,然后更改为.NET 4.5.这平衡了运行时间.