我已经开始在 C# 中大量使用匿名委托,并且我开始怀疑编译器或运行时从实际运行的代码中删除它们的效率如何,而我在任何地方都没有看到这个细节?
内联它们并折叠可以静态推断的递归使用是否足够聪明?
我已经开始在 C# 中大量使用匿名委托,并且我开始怀疑编译器或运行时从实际运行的代码中删除它们的效率如何,而我在任何地方都没有看到这个细节?
内联它们并折叠可以静态推断的递归使用是否足够聪明?
不,C# 编译器不会将 lambda 表达式优化为内联代码。匿名委托和 lambda 表达式将始终生成相应的委托或表达式树。这在 C# 语言规范的第 6.5 节中有所介绍
匿名方法表达式或 lambda 表达式被归类为匿名函数(第 7.14 节)。表达式没有类型,但可以隐式转换为兼容的委托类型或表达式树类型
在某些情况下,lambda 将被缓存并且不会重新创建以供将来使用。但它不会被内联。
在大多数情况下,不,不是。
但是,除非您注意到实际的性能问题并在分析器中跟踪它们,否则您不应该担心它。
C# 编译器永远不会优化它们。但是,如果足够简单,.NET JIT 编译器可能会。