C#中的事件
时间:2020-03-06 15:01:27 来源:igfitidea点击:
事件到底慢了多少?我已经编写了一个流XML解析器(可以处理开放式和不完整的文档),并且通过删除事件并使用接口来提高速度。
其他人有战争故事吗?
(让我们不在这里打开蠕虫的GC罐,我们都知道它已经坏了:))
解决方案
活动实际上只是代表。我记得,在2.0 CLR中它们的速度更快。我感到惊讶的是,用接口替换事件使我的代码运行起来非常快,而根据我的经验,它们的运行速度非常快,而且如果我们使用的是XML,那么我不希望事件调用成为瓶颈。
代码是否不断订阅和取消订阅事件?我们是否有解析特定文档时进行的事件调用次数的指示?
如果调用中没有反射,那么我认为开销可以忽略不计。假设当然是错误的。我们是否有微观基准可以证明这一点?
事件肯定比直接函数调用要慢,我无法确切地告诉我们速度要慢多少,但要明显得多。我们也可以绕过代表进行"中间"讨论。 .NET事件系统使用委托,但是直接通过委托与整个事件系统进行调用的方法仍然更快。
与虚拟方法调用相比,委托具有较小的开销,因为它们是方法列表,因此理论上可以调用多个处理程序。
事件触发是委托调用,它比虚拟调用慢一点
替代文字http://i.msdn.microsoft.com/cc163759.fig02(zh-cn).gif
但是处理订阅者/发布者/观察者/可观察场景的接口比使用事件要痛苦得多。