c# - "Avoid allocations in compiler hot paths"Roslyn 编码约定

标签 c# linq foreach conventions roslyn

我一直在阅读 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/

相关文章:

c# - RavenDB Map Reduce Transform 折叠不同的字符串列表

javascript - 问题 forEach JS 数组

c# - MassTransit 事务性发布

c# - 写入文件 C# 时使用错误的编码

c# - 当我们在 Entity Framework Core 中拥有主键时,我们是否应该始终使用 .Find() 而不是 .FirstOrDefault() ?

linq - LINQ 更快还是更方便?

javascript - 未定义 foreach 作为 AJAX 选项

java - 增强的 for 循环

c# - IHttpContextAccessor.HttpContext.User.Identity 显示 CurrentUserService 服务中的所有空属性

c# - 我应该如何使用 Entity Framework 实体分部类?