我一直在阅读.NET编译器平台(“Roslyn”)的Contributing Code部分,并且遇到了编码约定的准则。我了解大多数编码约定以及它们为什么会要求这样做。但我不明白这是什么意思:

什么是“编译器热路径”?为什么我应该避免使用LINQ并避免对没有结构枚举器的集合进行foreach?

最佳答案

编译器hot paths是编译器中的代码执行路径,其中大部分执行时间都花在了路径上,并且潜在地执行得非常频繁。

避免在这些代码路径中分配(堆)的原因是,分配可能会触发垃圾收集,这可能导致突然的极端性能下降。显然,在非常常用的代码路径中应避免这些情况。

选择Linq和foreach是因为它们会隐式分配内存-除非您的GetEnumerator返回struct,否则不会导致堆分配。

关于c# - “Avoid allocations in compiler hot paths”罗斯林编码约定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22894877/

10-11 00:45