我是f#的新手.我下载了Visual Studio 2010 shell和F#ctp,并使用以下代码编写了一个小的hello world脚本
printfn "Hello World"
let _ = System.Console.ReadLine()
Run Code Online (Sandbox Code Playgroud)
编译大约需要13到15秒,这与运行类似的C#脚本(大约需要2秒)相比非常慢.我希望F#脚本编译得更快,这样我的开发(即实验)时间就会减少,我不关心运行时性能.
有没有办法让F#脚本编译得更快,可能打开/关闭Visual Studio中的某些Build设置或类似的东西?
仅供参考,我使用4年前的奔腾4,1.5 gb RAM机器,如果有帮助的话.
Ste*_*orf 40
我不知道奔腾4应该如何快速编译"hello world"程序,但15秒让我觉得非常慢.我曾经遇到类似VS 2010 Beta的速度问题,问题是Visual Studio和F#编译器还没有正确地进行NGEN.
通常,Visual Studio安装应该确保一切都变得NGEN,但也许出了点问题.您可以在具有管理员权限的控制台窗口中使用以下命令检查F#编译器是否已经NGENed:
cd "C:\Program Files\FSharp-2.0.0.0\bin"
c:\windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe display fsc.exe
Run Code Online (Sandbox Code Playgroud)
如果结果显示本机映像fsc.exe
仍处于挂起状态,则可以强制编译:
c:\windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems
Run Code Online (Sandbox Code Playgroud)
注意:我不确定您正在使用哪个版本的F#编译器.VS2010的完整安装使用的是C:\Program Files\Microsoft F#\v4.0
(或C:\Program Files (x86)\Microsoft F#\v4.0
在64位机器上).因此,如果您使用那个,则必须cd
进入该文件夹而不是C:\Program Files\FSharp-2.0.0.0\bin
文件夹.
不幸的是,你无能为力--F#编译器比C#编译器慢.但让我解释一下原因:
为什么F#编译器比C#编译器慢
首先,F#编译器是用.NET编写的,C#编译器是用C++编写的.虽然这不仅仅是对perf的死刑判决,但确实有所作为.其次,C#编译器已有10年以上的历史.有很多时间来调整和优化它 - 编译器本身和.NET运行时..NET JIT引擎已针对C#/ VB.NET而非F#进行了微调.函数式编程需要大量短期对象,这些对象转换为不同类型的GC行为.
但是F#编译器明显比C#编译器慢的真正原因是因为它比C#编译器做得更多.在C#中,您提供了所有类型信息,这在某种程度上是您为编译器工作的.另一方面,F#为您进行类型推断,这样可以节省注释负担,但需要额外的CPU时间.
你可以做什么
我建议您下载Visual Studio 2008 shell并使用F#定位.NET Framework 2.0.除非您只需要Visual Studio 2010或CLR 4.0中的某些内容,否则您可以在Visual Studio 2008上使用.F#语言的功能完全相同.唯一的区别,IIRC,是某些事物编译的类型.例如,CLR 4.0中内置了一个Tuple <_>类型,但在使用CLha 2.0时,使用了FSharp.Core.dll中定义的元组类型.
Visual Studio 2010提供了许多光滑的铃声和口哨声,例如基于WPF的代码编辑器.然而,那些细节消耗了大量的RAM,在你的情况下,听起来你可以没有它们.
另请注意,您可以使用F#Interactive来评估代码或脚本的片段,并且由于VS中的FSI窗口保持打开状态,因此速度要快得多(fsc.exe的启动时间很短).
归档时间: |
|
查看次数: |
2934 次 |
最近记录: |