F#编译速度缓慢

5
除了运行ngen之外(或更好的是代替),有什么我可以做来加快f#代码的编译速度吗?
对于Pentium 4机器,"Hello World"的编译时间(或更好的说是编译器启动时间+编译时间)大约是多少?
编辑:实际上存在细微差别
首先,有人能解释一下什么是编译器的启动时间吗?为什么会很慢? 另外,如果有关整个f#编译过程的信息链接将不胜感激。
背景:在小代码片段上反复调用f#编译器。
using (CodeDomProvider provider = new Microsoft.FSharp.Compiler.CodeDom.FSharpCodeProvider())
{
  //start time
  cr = provider.CompileAssemblyFromSource(cp, new string[] { data.Program });
  //end time
}

时间差大约为6秒。那么问题基本上是除了ngen之外还能做什么?您可以在此处自行查看:rundotnet


可能是f#编译太慢的重复问题。 - Mauricio Scheffer
也许这应该是另一个话题,但什么是启动,并且如果我必须编译多次,是否有可能“启动”一次? - ren
特别地,Chris Smith在那里解释了为什么F#编译器可能永远不会像C#编译器一样快。 - Mauricio Scheffer
你觉得哪个比较慢?启动还是实际编译? - Mauricio Scheffer
代码是从C#动态编译的,所以我猜FSharpCodeProvider也可以从C#中调用fsc.exe,如果这样会更快。 - ren
显示剩余7条评论
1个回答

5

在我的电脑上(AMD Athlon 64 X2 4600),这需要0.9秒:

#r "FSharp.Compiler.CodeDom"

open System.Reflection
open System.CodeDom.Compiler
open Microsoft.FSharp.Compiler.CodeDom

let comp() =
    use provider = new FSharpCodeProvider() 
    let code = "module pp\n printfn \"Hello world\""
    let cp = new CompilerParameters() 
    cp.GenerateInMemory <- true 
    provider.CompileAssemblyFromSource(cp, [|code|]) |> ignore
#time
comp()

@CheckMate9500:你运行过ngen吗?请参考https://dev59.com/JW445IYBdhLWcg3wytIU。 - Mauricio Scheffer
1
@CheckMate9500:对于一台可能运行Atom CPU的净书来说,这听起来并不那么不合理... F#编译器非常需要CPU。 - Mauricio Scheffer
有点晚了...是的...但 Haskell 的 GHC/GHCI 快了几个数量级...也许不是一个公平的比较,但还是... :-( - chosenbreed37

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接