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