我会寻找更详细的信息(如果这是你要找的),而不是在文档中,而是在
.net core github或
发布说明中。让我们从后者开始看起。对于 .net core 3.0,我们可以找到以下条目:
完全优化的JIT会更慢地生成更高质量(或更优化)的代码。对于不使用 Quick JIT 的方法(例如,如果该方法带有 MethodImplOptions.AggressiveOptimization 特性),将使用完全优化的JIT。
因此,首先我们知道,如果一个方法被标记为这样的属性,它应该使用完全优化的JIT进行JIT编译,这可能会产生更好、更优化的代码 - 但需要更长的编译时间。
现在让我们关注github,看看我们能在那里找到什么。这个
ticket中讨论了这个问题,并且对这个主题提供了更多的细节。
该标志可以用于MethodImplAttribute中,以指示该方法包含热代码:
- 对于分层编译,它可以立即使用第一层JIT来处理该方法[...]
- 它可以允许JIT花更多的时间生成更好的代码,例如更积极地将代码内联到函数中
从这里我们可以得到一个答案,在哪些情况下可以使用它,以及它在底层正在执行什么操作。
在处理热路径代码的情况下,此属性有助于JIT进行更快,更优化的代码生成,而不是进行分层编译。在开始时使用更多的时间如果运行时检测到它实际上处于热路径上,则可以节省后面的时间。
还有一个有趣的讨论,关于该标志的其他用途,您可以阅读。
但是最终的真相(我希望如此)和提交与此讨论相关,因此我们可以查看它们。通过这些提交和提交消息,我们可以了解到这实际上是分层编译和JIT所发生的事情(至少这是我所看到的)。