2

事件慢了多少?我编写了一个流式 XML 解析器(它可以处理开放式和不完整的文档),并且通过删除事件并使用接口来代替我获得了显着的速度提升。

有没有其他人有任何战争故事?

(我们不要在这里打开蠕虫的GC罐,我们都知道它坏了:))

4

5 回答 5

20

事件触发是委托调用,比虚拟调用慢一点

替代文字
(来源:microsoft.com

但是处理订阅者/发布者/观察者/可观察场景的接口比使用事件更痛苦。

于 2008-10-02T13:06:42.160 回答
3

事件实际上只是代表。据我回忆,它们在 2.0 CLR 中变得更快了。我很惊讶用接口替换事件使您的代码显着更快 - 根据我的经验,它们非常快,如果您正在处理 XML,我不会期望事件调用成为瓶颈。

您的代码是否经常订阅和取消订阅事件?您是否有任何迹象表明解析特定文档时进行的事件调用次数?

于 2008-10-02T13:00:33.237 回答
0

事件肯定比直接的函数调用慢,我不能告诉你到底慢了多少,但很明显。您还可以将代表传递给“中间”立场。.NET 事件系统使用委托,但直接通过委托调用方法与整个事件系统相比仍然更快。

于 2008-10-02T13:03:40.793 回答
0

与虚拟方法调用相比,委托具有轻微的开销,因为它们是方法列表,因此理论上可以调用多个处理程序。

于 2008-10-02T13:05:35.953 回答
-1

如果调用中不涉及反射,那么我认为开销可以忽略不计。假设当然可能是错误的。你有一个微型基准来证明这一点吗?

于 2008-10-02T13:02:52.967 回答