事件.Invoke(args) vs event(args).哪个更快
本文关键字:args vs Invoke 事件 event | 更新日期: 2023-09-27 17:55:41
哪个更快;使用event.Invoke(args)
,或者只是调用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)
的调用。 这是一回事 - 就像使用 string
或 System.String
.
这两种方式最终都会生成完全相同的 IL,因此调用它们没有任何区别。
话虽如此,如果您遇到性能问题,这样的更改不太可能对您有很大帮助,如果有的话。