在c#中,事件代码是否比虚拟/覆盖方法对缓存更友好?

本文关键字:方法 覆盖 缓存 虚拟 事件 代码 是否 | 更新日期: 2023-09-27 18:16:33

阅读这个问题中的缓存友好代码,我想知道在c#中使用类时,触发和处理事件是否比重写方法更缓存友好(因为其中一个答案表明应该避免虚拟方法,至少在c++中),或者有比这两种方法更好的策略?

在c#中,事件代码是否比虚拟/覆盖方法对缓存更友好?

我想知道在c#中使用类时,触发和处理事件是否比重写方法对缓存更友好

一般来说,没有。事件将需要调用一个单独的类实例,它将位于一个单独的内存位置。这将有与虚拟方法调用相同(甚至可能更糟)的缓存问题。

或者有比这两种方法更好的策略吗?

不幸的是,习惯的c#倾向于不支持缓存。为了编写缓存友好的c#代码,您通常希望使用struct而不是class,避免虚拟方法,避免事件,避免委托(至少带有闭包的委托)等。Rico Mariani有一篇关于基于值的编程的博文,详细讨论了这些问题。