哪个更快; 使用event.Invoke(args),或只是打电话event(args).有什么不同?是一个比另一个更快或更慢; 或者只是一个偏好的问题?
SLa*_*aks 49
写作someDelegate(...)是编译器的简写someDelegate.Invoke(...).
它们都编译为相同的IL-a callvirt指令到该委托类型的Invoke方法.
该Invoke方法由编译器为每个具体委托类型生成.
相比之下,在DynamicInvoke基Delegate类型上定义的方法使用反射来调用委托并且速度很慢.
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)
两种方式最终都会生成完全相同的IL,因此调用它们没有任何区别.
话虽这么说,如果你遇到性能问题,这样的改变可能对你没什么帮助,如果有的话.如果您没有性能问题,那么根本没有理由提出这样的问题.
| 归档时间: |
|
| 查看次数: |
15375 次 |
| 最近记录: |