.NET Core:MethodImplOptions.AggressiveOptimization 究竟做了什么?
.NET Core: What does MethodImplOptions.AggressiveOptimization exactly do?
MethodImplOptions.AggressiveOptimization
到底是做什么的?
Microsoft's documentation 并没有告诉我太多。在哪些情况下会有用?
我会在 .net core github or in release notes.
上而不是在文档中寻找更多详细信息(如果那是你要找的)
让我们从后者开始。对于 .net core 3.0,我们可以找到以下条目:
The fully optimizing JIT produces higher-quality (or more optimized) code more slowly. For methods where Quick JIT would not be used (for example, if the method is attributed with MethodImplOptions.AggressiveOptimization), the fully optimizing JIT is used.
所以一方面,我们知道如果一个方法被标记为这样的属性,它应该使用完全优化的 JIT 进行 JIT,这可能会产生更好、更优化的代码——但会花费更多的时间来编译。
现在让我们关注 github,看看我们能在那里找到什么。
关于这个的讨论在这个 ticket 中完成,它提供了更多关于主题的细节。
The flag could be used in a MethodImplAttribute to indicate that the method contains hot code:
- For tiering, it could cause tier 1 JIT to be used right away for the method[...]
- It could allow the JIT to spend more JIT time to generate better code, such as inlining more aggressively into the function
从这里我们可以得到一个答案,在什么情况下可以使用它,以及它在下面做什么。
在我们处理热路径代码的情况下 - 此属性有助于 JIT 生成更快、更优化的代码,而不是进行分层编译。如果运行时检测到它实际上在热路径上,则在开始时使用更多时间可以节省以后的时间。
还有关于此标志的其他用法的有趣讨论,您可以阅读。
但最终的真相(我希望)和提交链接到这个讨论,所以我们可以看看它们。从这些提交和提交消息中我们可以了解到,这实际上是分层编译和 JIT 正在发生的事情(至少这是我所看到的)。
MethodImplOptions.AggressiveOptimization
到底是做什么的?
Microsoft's documentation 并没有告诉我太多。在哪些情况下会有用?
我会在 .net core github or in release notes.
上而不是在文档中寻找更多详细信息(如果那是你要找的)让我们从后者开始。对于 .net core 3.0,我们可以找到以下条目:
The fully optimizing JIT produces higher-quality (or more optimized) code more slowly. For methods where Quick JIT would not be used (for example, if the method is attributed with MethodImplOptions.AggressiveOptimization), the fully optimizing JIT is used.
所以一方面,我们知道如果一个方法被标记为这样的属性,它应该使用完全优化的 JIT 进行 JIT,这可能会产生更好、更优化的代码——但会花费更多的时间来编译。
现在让我们关注 github,看看我们能在那里找到什么。
关于这个的讨论在这个 ticket 中完成,它提供了更多关于主题的细节。
The flag could be used in a MethodImplAttribute to indicate that the method contains hot code:
- For tiering, it could cause tier 1 JIT to be used right away for the method[...]
- It could allow the JIT to spend more JIT time to generate better code, such as inlining more aggressively into the function
从这里我们可以得到一个答案,在什么情况下可以使用它,以及它在下面做什么。
在我们处理热路径代码的情况下 - 此属性有助于 JIT 生成更快、更优化的代码,而不是进行分层编译。如果运行时检测到它实际上在热路径上,则在开始时使用更多时间可以节省以后的时间。
还有关于此标志的其他用法的有趣讨论,您可以阅读。
但最终的真相(我希望)和提交链接到这个讨论,所以我们可以看看它们。从这些提交和提交消息中我们可以了解到,这实际上是分层编译和 JIT 正在发生的事情(至少这是我所看到的)。