.NET Core.MethodImplOptions.AggressiveOptimization是什么?MethodImplOptions.AggressiveOptimization到底有什么作用?

问题描述 投票:0回答:1

什么是 MethodImplOptions.AggressiveOptimization 到底该怎么办?微软的文档 并没有告诉我什么。在哪些情况下它可以发挥作用?

.net optimization .net-core documentation jit
1个回答
2
投票

我会在文档中寻找更多的细节信息(如果这就是你要找的),而不是在文档中,而是在 .net core github 或在 发行说明.

让我们先看看后者。对于.net core 3.0,我们可以找到以下条目。

完全优化的JIT产生更高质量(或更优化)的代码会更慢。对于不会使用Quick JIT的方法(例如,如果该方法被归结为MethodImplOptions.AggressiveOptimization),则会使用完全优化的JIT。

所以,首先,我们知道,如果一个方法被标记了这样的属性,就应该使用完全优化的JIT,这可能会产生更好、更优化的代码--但会花费更多的编译时间。

现在让我们关注一下github,看看我们能在那里找到什么。

关于这个问题的讨论是在这个 门票,它给了这个主题更多的细节。

这个标志可以用在MethodImplAttribute中,以表明该方法包含热代码。

  • 对于分层来说,它可以使第1层的JIT立即用于该方法[...]。
  • 它可以让JIT花更多的JIT时间来生成更好的代码,比如更积极地内联到函数中去。

从这里我们可以得到一个答案,在哪些情况下可以使用它,但也可以知道它在下面做什么。

在我们处理热路径代码的情况下--这个属性很有用,可以让JIT它产生更快更优化的代码,而不是做分层编译。一开始使用更多的时间,以后如果运行时检测到它,其实是在热路径上,就可以节省时间。

关于这个标志的其他用法,也有一个有趣的讨论,你可以阅读。

但最终的真相(我希望)和提交信息都与这个讨论相关联,所以我们可以看一下。从这些提交和提交信息中,我们可以了解到,这其实就是分层编译和JIT的情况(至少我看到的是这样)。

© www.soinside.com 2019 - 2024. All rights reserved.