FSharp.Core没有优化?

时间:2010-08-24 09:51:13

标签: f# cil

我最近检查了F#应用程序的性能,在挖掘CIL时我发现FSharp.Core(适用于.NET v4.0)包含几个nop指令,许多未使用的变量和变量只是通过stloc / ldloc指令序列写入/读取一次 我已经调查了可能的原因,我注意到即使在发布模式下,F#程序集也包含--debug:pdbonly指令,并且没有办法禁用它并从项目设置UI切换到--debug-。 > 我想知道FSharp.Core的编译设置是否有特定的选择,如果是这样的话。否则期望完全优化的运行时版本是合法的吗?

2 个答案:

答案 0 :(得分:5)

似乎对这个问题的评论已经回答了约90%;重申一下:

  • 宇宙中几乎每个发布二进制文件都是使用--debug:pdbonly
  • 编译的
  • 即使IL代码是次优的,由于JIT优化它也可能没有任何实际影响

当然,F#编译器有可能以各种方式发出更好的代码(这可能适用于每个编译器);如果您对自己的应用进行了分析并注意到一些不好的事情(例如,与C#中的可比代码相比存在很大的差异),那么您可以通过邮寄fsbug来让F#团队知道。但首先要衡量。

答案 1 :(得分:1)

  

否则期望完全优化的运行时版本是合法的吗?

您建议的更改无法合理地视为优化。两者都是无害的,将由VM编译。 ISTR,mut用于替换堆叠,因为基于堆栈的VM可以堆叠溢出。这就是F#正确地解决了CLR中的错误。