哪个更快;使用event.Invoke(args)
,或只是致电event(args)
。有什么不同?一个比另一个更快或更慢;还是只是一个偏好问题?event.Invoke(args)vs event(args)。哪个更快?
12
A
回答
35
写作someDelegate(...)
是someDelegate.Invoke(...)
编译器的简写。
他们都编到同IL —一个callvirt
指令到委托类型的Invoke
方法。由编译器为每个具体委托类型产生
的Invoke
方法。
相比之下,基于Delegate
类型定义的DynamicInvoke
方法使用反射来调用委托并且速度很慢。
9
当你调用event(args)
,C#编译器把它变成一个IL呼吁event.Invoke(args)
。这是一样的 - 就像使用string
或System.String
。
6
这两种方式最终产生完全相同的IL相同,所以不称他们为任何区别。
话虽这么说,如果你有性能问题,这样的变化可能不会帮助你多少,如果在所有。如果你没有性能问题,那么就没有理由提出这样的问题。
2
由于在C#6.0中引入null-conditionals,Invoke
可用于简化代表的线程安全空值检查。您先前将不得不做一些像
var handler = event;
if (handler != null)
handler(args);
的?.
组合和Invoke
允许你简单地写
event?.Invoke(args)
相关问题
- 1. 我什么时候使用** kwargs vs kwargs(* args vs args)?
- 2. java args like linux args
- 3. Python关键词ARGS VS kwargs
- 4. args和args [..]是否一样?
- 5. get_absolute_url()与多个ARGS
- 6. boost :: unordered_map.emplace(Args && ... args)如何工作?
- 7. golang通在args(串片)为“ARGS ...接口{}”
- 8. 使Mock.assert_called_with()与args vs kwargs无关
- 9. 在VS中传递Main(string [] args)参数
- 10. Collections.reverse()vs Lists.reverse()哪个更快?
- 11. python * args和** kwargs
- 12. 迭代* args?
- 13. Tkinter:return self.func(* args)
- 14. Java:Method.invoke(this,args)NullPointerException
- 15. Python TypeError with * args
- 16. phonegap window.requestFileSystem args
- 17. JAVA main with args
- 18. 没有ARGS
- 19. PowerShell中的$ args probleme
- 20. class,dict,self,init,args?
- 21. 爪哇 - ARGS []为int
- 22. Scala args(0)原因
- 23. rethinkdb getAll:order by args order
- 24. 使用args设施
- 25. TCL错误:错误#ARGS:应该是 “PROC名ARGS体”
- 26. Variadic args。如何可变参数ARGS传递给
- 27. (fn [f&args](apply f args))的标准版本或习惯用法
- 28. result_of <F(Args...>和decltype <f(args...)>有什么区别?
- 29. Java编码有关字符串ARGS []和字串[] args混乱
- 30. main(String args [])和main(String [] args)之间有区别吗?
你自己尝试一下?分析它并查看哪个更好? – 2011-05-08 14:41:40
只有少数几个客户似乎没有什么区别,但我关心的是当我扩大规模时会发生什么。在我们的新产品发布之前,我必须做出决定,一台计算机可能会一次处理数千个网络连接。 – IDWMaster 2011-05-08 14:43:35
如果有人能够解释这两种方法的实施方式有什么不同,那就太好了。 – IDWMaster 2011-05-08 14:45:09