基本上有两种模式可以避免重复注册事件处理程序: (根据这个讨论:C# pattern to prevent an event handler hooked twice)
使用 System.Linq 命名空间,并通过调用
GetInvocationList().Contains(MyEventHandlerMethod); 检查事件处理程序是否已注册
注册前先注销,如下:
MyEvent -= MyEventHandlerMethod; MyEvent += MyEventHandlerMethod;
我的问题是,就性能而言,哪个更好,或者它们之间在性能上有显着差异吗?
最佳答案
我认为这无关紧要,无论是在假定的性能提升还是实际差异方面。
GetInvocationList
和-=
都遍历内部数组_invocationList
。 (参见 source)
LINQ 扩展方法 Contains
将花费更多时间,因为它需要遍历和转换整个数组,返回并由 Contains
本身进行检查。 Contains
的优点是它不需要添加事件处理程序如果它存在,这将意味着一些性能提升。
关于c# - 哪个 C# 模式具有更好的性能来避免重复的事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27703913/