Lambda表达式的性能优势

Nas*_*san 3 c# performance lambda

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

Ree*_*sey 10

它们在某些/所有情况下都更有效吗?

一般而言,Lambda表达式与性能效率无关,与开发人员效率无关.

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

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


Guf*_*ffa 5

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

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

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

Func<int, int> mul = n => n * 2;
Run Code Online (Sandbox Code Playgroud)

相比:

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

Func<int, int> = Mul;
Run Code Online (Sandbox Code Playgroud)

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

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

int x = 2;
Func<int, int> mul = n => n * x;
Run Code Online (Sandbox Code Playgroud)

相比:

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;
Run Code Online (Sandbox Code Playgroud)