【发布时间】:2020-08-19 09:50:55
【问题描述】:
MethodImplOptions.AggressiveOptimization 到底是做什么的?
Microsoft's documentation 并没有告诉我太多。在什么情况下可以派上用场?
【问题讨论】:
标签: .net optimization .net-core documentation jit
MethodImplOptions.AggressiveOptimization 到底是做什么的?
Microsoft's documentation 并没有告诉我太多。在什么情况下可以派上用场?
【问题讨论】:
标签: .net optimization .net-core documentation jit
我会在.net core github 或release notes 上而不是在文档中查找更多详细信息(如果您正在寻找的话)。
让我们从后者开始。对于 .net core 3.0,我们可以找到以下条目:
完全优化的 JIT 生成更高质量(或更优化)的代码的速度更慢。对于不使用 Quick JIT 的方法(例如,如果该方法具有 MethodImplOptions.AggressiveOptimization 属性),则使用完全优化的 JIT。
因此,首先,我们知道如果一个方法被标记了这样的属性,它应该使用完全优化的 JIT 进行 JIT,这可能会产生更好、更优化的代码 - 但会花费更多时间来编译。
现在让我们关注 github,看看我们可以在那里找到什么。
关于这个的讨论在这个ticket 中完成,它提供了更多关于这个主题的细节。
可以在 MethodImplAttribute 中使用该标志来指示该方法包含热代码:
- 对于分层,它可能会导致第 1 层 JIT 立即用于方法[...]
- 它可以让 JIT 花费更多的 JIT 时间来生成更好的代码,例如更积极地内联到函数中
由此我们可以得到答案,在哪些情况下可以使用它,以及它在下面做什么。
在我们处理热路径代码的情况下 - 此属性有助于 JIT 生成更快、更优化的代码,而不是进行分层编译。如果运行时检测到它实际上处于热路径上,则在开始时使用更多时间可以节省时间。
您可以阅读有关此标志的其他用法的有趣讨论。
但最终的真相(我希望)和提交与此讨论相关联,因此我们可以查看它们。从这些提交和提交消息中,我们可以了解到这实际上是分层编译和 JIT 正在发生的事情(至少这是我能看到的)。
【讨论】: