【发布时间】:2010-08-24 09:51:12
【问题描述】:
我最近检查了 F# 应用程序的性能,在挖掘 CIL 时我发现 FSharp.Core(用于 .NET v4.0)包含几个 nop 指令、许多未使用的变量和仅通过 stloc/ldloc 指令序列写入/读取一次。
我调查了可能的原因,我注意到即使在发布模式下,F# 程序集也包含 --debug:pdbonly 指令,并且无法禁用它并从项目设置 UI 切换到 --debug-。
我想知道 FSharp.Core 的编译设置是否有特定的选择,如果有,那是什么。否则期望运行时的完全优化版本是否合法?
【问题讨论】:
-
--debug:pdbonly对于发布代码是正常的,这仅包括有限的调试信息并允许对堆栈进行解码。所有的 Windows(包括 .NET)都是这样构建的:这就是 MS 可以在其符号服务器上提供符号的方式。 -
@Richard:谢谢。我怀疑与调试相关的原因,但是我想知道更优化的版本是否会带来性能优势......在性能关键,计算绑定的应用程序中,人们希望能够牺牲调试能力来挤压每一个CPU周期...
-
@emaster70:PDB 仅调试信息没有性能影响,我对您问题的核心不做评论。
-
您的分析是否发现了 F# 核心库的特定问题?我希望 JIT 编译器忽略任何 nop,所以我不希望这会引入任何实际性能问题。