事件是否比 C# 中的虚拟/覆盖方法更适合缓存?

Gui*_*rez 2 c# performance events caching virtual-functions

阅读this SO question中缓存友好代码,我想知道在使用C#中的类时,触发和处理事件是否比覆盖方法更对缓存友好(因为其中一个答案指出应该避免虚拟方法,至少在 C++ 中),或者有比这两种方法更好的策略?

Ree*_*sey 5

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

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

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

不幸的是,惯用的 C# 往往是非缓存友好的。为了编写缓存友好的 C# 代码,您通常希望使用structover class,避免虚拟方法,避免事件,避免委托(至少是带有闭包的委托)等。 Rico Mariani 有一篇关于基于值的编程的很好的博客文章,其中讨论了许多这些问题详细。