2011-08-20 128 views
3

有什麼我可以做的,使f#代碼編譯速度更快(或更好,而不是)運行ngen?f#緩慢編譯

什麼是近似基準「hello world」編譯時間(或更好地說,編譯器啓動時間+編譯時間)爲說pentium 4機器?

編輯有細微差別,因爲它原來:)

因此,首先,任何人都可以解釋什麼是編譯器的啓動時間?爲什麼它很慢。 同樣鏈接到整個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

+0

的 「Hello World」 的標杆編譯*錯誤*,你只是衡量啓動開銷,並非真正的編譯器性能。 –

+0

[f#編譯速度太慢]的可能重複(http://stackoverflow.com/questions/4697771/f-compiling-too-slow) –

+0

也許這應該是不同的話題,但什麼是啓動,如果有可能「啓動」一次,如果我必須多次編譯? – ren

回答

4

這需要0.9S我的電腦上(AMD速龍64 X2 4600):

#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() 
+1

在我的電腦(上網本)上面的代碼需要28秒! – 2011-11-05 07:52:01

+0

@ CheckMate9500:你有沒有運行ngen?看到http://stackoverflow.com/questions/4697771/f-compiling-too-slow –

+0

我剛剛做到了,編譯時間縮短到7秒。 – 2011-11-07 18:16:20