提高.net中的事件 - 性能影响

时间:2011-02-23 19:28:35

标签: .net performance memory

在编写好的性能代码方面,抛出异常代价很高。但是如何举办活动呢?因此,对.net clr人群的理论质疑:

有关一个订户举办活动的内存含义是什么?拥有1 000 000名订户?如何计算这些含义?是否直接调用一个事件euqal调用(否则处理程序)订阅者的成员方法?

2 个答案:

答案 0 :(得分:6)

“提升事件”通常只是意味着“调用委托” - 但可能是一个多播委托,其列表中有许多调用。这些都非常便宜......通常只是直接的方法调用,尽管有些情况比较贵。 (IIRC,调用通过接口方法创建的代理更加昂贵。)

我强烈建议您编写最自然的代码,然后测试它以查看它是否表现得足够好。我无法立即想到一种更快的方式来有效地调用一堆订阅者方法。我怀疑它通常和迭代接口实现列表并在每个接口上调用接口方法一样便宜,并且在某些情况下可能会显着降低成本。

答案 1 :(得分:1)

主要含义是,如果将事件公开,则无法控制其影响。任何订阅者都可能需要一个小时来处理您的事件,无限期阻止或甚至可能会抛出异常。通常,这种缺乏控制并不是一个大问题,因为您自己可以控制所有订阅者,或者您正在创建一个供其他人使用的组件,然后组件的用户负责他们订阅的使用和事​​件处理程序。

提升事件与调用与订阅计数相同数量的方法的性能大致相同。