代码之家  ›  专栏  ›  技术社区  ›  em70

核心没有优化?

  •  2
  • em70  · 技术社区  · 15 年前

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

    2 回复  |  直到 15 年前
        1
  •  5
  •   Brian    15 年前

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

    • 几乎所有的发布二进制文件都是用--debug:pdbonly编译的
    • 即使IL代码是次最优的,但由于JIT对其进行了优化,这可能不会产生任何实际影响。

    当然,F编译器可以通过各种方式发出更好的代码(这可能适用于每一个编译器);如果你分析你的应用并注意到一些不好的地方(例如,与来自C的可比代码存在很大的差异),那么你可以通过发送fsbug让F团队知道。但首先要测量。

        2
  •  1
  •   J D    15 年前

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

    您建议的更改不能合理地视为优化。两者都是无害的,将由虚拟机编译掉。由于基于堆栈的虚拟机可以进行堆栈溢出,因此使用变异来替换堆栈。所以这就是f正确处理clr中的bug。