C#委托编译器优化

iam*_*iam 8 c# optimization delegates jit anonymous

我已经开始在C#中大量使用匿名委托了,我开始怀疑编译器或运行时从实际运行的代码中删除它们的效率如何,我还没有在任何地方看到过详细的内容?

是否足够聪明地内联它们并崩溃可以静态推导的递归用法?

Jar*_*Par 3

不,C# 编译器不会将 lambda 表达式优化为内联代码。匿名委托和 lambda 表达式将始终生成相应的委托或表达式树。C# 语言规范第 6.5 节对此进行了介绍

\n\n
\n

匿名方法表达式或 lambda 表达式被归类为匿名函数 (\xc2\xa77.14)。表达式没有类型,但可以隐式转换为兼容的委托类型或表达式树类型

\n
\n\n

在某些情况下,lambda 将被缓存并且不会重新创建以供将来使用。但它不会被内联。

\n