我一直在阅读 Contributing Code .NET 编译器平台(“Roslyn”)的部分,我遇到了编码约定指南。我了解大多数编码约定以及他们为什么会要求它。但我不明白他们的意思:
Avoid allocations in compiler hot paths:
Avoid LINQ.
Avoid using foreach over collections that do not have a struct enumerator.
什么是“编译器热路径”?为什么我应该避免使用 LINQ 并避免对没有结构枚举器的集合执行 foreach?
最佳答案
编译器 hot paths是编译器中的代码执行路径,大部分执行时间都花在其中,并且可能执行得非常频繁。
在这些代码路径中避免(堆)分配的原因是分配可能会触发垃圾收集,这可能会导致突然的、极端的性能下降。在非常常用的代码路径中显然应该避免这些。
Linq 和 foreach
被挑出来是因为它们将隐式分配内存 – 除非您的 GetEnumerator
返回一个 struct
,这不会导致堆分配。
关于c# - "Avoid allocations in compiler hot paths"Roslyn 编码约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22894877/