事件.Invoke(args) vs event(args).哪个更快

本文关键字:args vs Invoke 事件 event | 更新日期: 2023-09-27 17:55:41

哪个更快;使用event.Invoke(args),或者只是调用event(args)。有什么区别?一个比另一个快还是慢;还是只是偏好问题?

事件.Invoke(args) vs event(args).哪个更快

编写someDelegate(...)someDelegate.Invoke(...)的编译器简写。
它们都编译为同一个 IL,即该委托类型的Invoke方法的callvirt指令。

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

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

自从在 C# 6.0 中引入 null 条件以来,Invoke可用于简化委托的线程安全 null 检查。您以前必须执行类似操作的地方

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

?.Invoke的结合使您可以简单地编写

event?.Invoke(args)

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

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

话虽如此,如果您遇到性能问题,这样的更改不太可能对您有很大帮助,如果有的话。