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

时间:2011-05-08 14:40:18

标签: c# .net

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

4 个答案:

答案 0 :(得分:47)

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

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

相比之下,基础DynamicInvoke类型上定义的Delegate方法使用反射来调用委托并且速度很慢。

答案 1 :(得分:13)

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

var handler = event;
if (handler != null)
    handler(args);

?.Invoke的组合可让您简单地编写

event?.Invoke(args)

答案 2 :(得分:11)

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

答案 3 :(得分:7)

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

话虽如此,如果您遇到性能问题,这样的更改可能对您没有多大帮助,如果有的话。如果您没有性能问题,那么根本没有理由提出这样的问题。