C#Lambda与事件处理程序的性能

Kei*_*ler 5 c# performance lambda delegates

如果使用Lambda处理异步回调与老式事件处理程序相比具有哪些性能优势呢?

我发现我更多地使用这种模式,因为它允许我访问方法级数据,并且它不会丢弃我的代码方法:

this.Click += (s, e) => { MessageBox.Show(((MouseEventArgs)e).Location.ToString());};
Run Code Online (Sandbox Code Playgroud)

Ree*_*sey 6

lambda只是一个由编译器创建的委托.实际上,它的表现完全相同.

从技术上讲,通常会有一个(令人难以置信的轻微)性能下降,因为创建了一个额外的类来处理闭包,传统的"事件处理程序"通常只是调用事件的同一个类的委托引用.如果不关闭任何局部变量,则两者将具有完全相同的性能特征.在您的情况下,由于您没有关闭变量,因此没有生成额外的类,因此存在零差异.

使用lambda的主要缺点不是性能,而是无法取消订阅事件.