Lambda表达式的性能优势

时间:2012-08-27 23:39:10

标签: c# performance lambda

我对C#中的lambda表达式很新,我倾向于不使用它们,因为我不知道最小化代码的好处是什么。它们在某些/所有情况下都更有效吗?或者除了将更多代码放在一行之外,还有什么奇妙的东西可以实现吗?

2 个答案:

答案 0 :(得分:10)

  

它们在某些/所有情况下是否更有效?

Lambda表达式通常与性能效率无关,与开发人员效率无关。

与手工编写方法相比,它们是一种以更高效的方式创建方法的方法。话虽如此,他们没有(直接)改善表现。

但是,通过正确使用以功能方式工作的框架(即:使用LINQ),可以增加编写高效代码的可能性,因为框架本身可能已经过高度优化。

答案 1 :(得分:5)

Lambda表达式不是更高效,它们更简单。它们主要用于:

  • 创建代表
  • 为LINQ创建表达式
  • 将局部变量放入代理人的捕获中

创建委托时,编译器创建的代码就像你创建了一个命名方法一样,并获得了该方法的委托。

Func<int, int> mul = n => n * 2;

与之相比:

public static int Mul(int n) {
  return n * 2;
}

Func<int, int> = Mul;

在创建表达式时,编译器会创建一个表达式树,该树可以转换为委托,也可以由LINQ提供程序用于转换为其他内容。例如,Linq To Sql提供程序会将表达式转换为SQL代码。

创建使用在创建删除的方法中声明的局部变量的委托时,会自动在该变量所在的位置创建闭包对象,而不是将变量放在堆栈上。这类似于通过将变量设置为声明方法的类中的字段,使变量可用于命名方法。

int x = 2;
Func<int, int> mul = n => n * x;

与之相比:

public class Closure {

  public int x;

  public int Mul(int n) {
    return n * x;
  }

}

Closure c = new Closure;
c.x = 2;

Func<int, int> mul = x.Mul;
相关问题