Clo*_*ife 25 c# linq foreach conventions roslyn
我一直在阅读.NET编译器平台的贡献代码部分("Roslyn"),我遇到了编码约定的指南.我理解大多数编码约定以及为什么要求它.但我不明白他们的意思是:
避免在编译器热路径中进行分配:
避免使用LINQ.
避免在没有结构枚举器的集合上使用foreach.
什么是"编译器热门路径"?为什么我应该避免使用LINQ并避免对没有结构枚举器的集合进行预测?
Kon*_*lph 34
编译器热路径是编译器中的代码执行路径,其中大部分执行时间都花费了,并且可能经常执行.
在这些代码路径中避免(堆)分配的原因是分配可能触发垃圾收集,这可能导致突然的,极端的性能恶化.显然应该在非常常见的代码路径中避免这些.
Linq和foreach被挑出来因为这些将隐式分配内存 - 除非你GetEnumerator返回a struct,这不会导致堆分配.
jal*_*alf 11
"热路径"是对性能最关键的代码路径.代码片段每秒执行数百万或数十亿次,占用了大部分执行时间.
在我阅读时,其他两个只是可能导致隐式分配的情况的示例,因此应该在代码的性能关键部分中避免.
| 归档时间: |
|
| 查看次数: |
2890 次 |
| 最近记录: |