2012-11-27 105 views
4

我最近注意到F#Interactive比编译版本要快得多(在Release或Debug模式下)。下面是一个例子:F#交互速度快于编译

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#交互运行时,输出“4986”。我使用“main [||] ;;”以交互模式运行它。

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

编辑[规格]: F#3.0 for .NET 4.设置优化代码并生成尾部调用标志,我正在为x86编译。我使用的是i7 950.我正在使用visual studio 2012.

+0

什么是您的F#/ .NET框架/ Visual Studio版本?编译版本是x86还是x64?你在VS外面运行编译好的程序吗? – pad

+0

看看这个链接http://msdn.microsoft.com/en-us/magazine/ff714588.aspx –

+0

对不起,我真的应该把我的规格,我非常愚蠢。 F#3.0 for .NET 4.优化代码并生成尾部调用标志,我正在为x86编译。我正在使用i7 950.我正在使用visual studio 2012. – Maltic

回答

3

Ran按照pad的建议在VS2012之外运行,然后更改为.NET 4.5。这平衡了运行时间。

+3

为了达到与在VS外运行可执行文件相同的效果,您可以转至* Tools - > Options - > Debugging - > General *和UNCHECK *在模块负载*上抑制JIT优化。 – pad

+0

或者只是点击ctrl-f5(菜单:调试/开始不调试)而不是f5。 –