event.Invoke(args)vs event(args).哪个更快?

bbo*_*sak 25 .net c#

哪个更快; 使用event.Invoke(args),或只是打电话event(args).有什么不同?是一个比另一个更快或更慢; 或者只是一个偏好的问题?

SLa*_*aks 49

写作someDelegate(...)是编译器的简写someDelegate.Invoke(...).
它们都编译为相同的IL-a callvirt指令到该委托类型的Invoke方法.

Invoke方法由编译器为每个具体委托类型生成.

相比之下,在DynamicInvokeDelegate类型上定义的方法使用反射来调用委托并且速度很慢.


fug*_*ede 19

由于在C#6.0中引入了null-conditionals,Invoke因此可以用来简化代理的线程安全空检查.您以前必须做的事情

var handler = event;
if (handler != null)
    handler(args);
Run Code Online (Sandbox Code Playgroud)

组合?.Invoke允许你简单地写

event?.Invoke(args)
Run Code Online (Sandbox Code Playgroud)


Kev*_*vin 11

当您调用时event(args),C#编译器将其转换为IL调用event.Invoke(args).这是一回事 - 就像使用stringSystem.String.


svi*_*ick 7

两种方式最终都会生成完全相同的IL,因此调用它们没有任何区别.

话虽这么说,如果你遇到性能问题,这样的改变可能对你没什么帮助,如果有的话.如果您没有性能问题,那么根本没有理由提出这样的问题.