Gui*_*rez 2 c# performance events caching virtual-functions
阅读this SO question中的缓存友好代码,我想知道在使用C#中的类时,触发和处理事件是否比覆盖方法更对缓存友好(因为其中一个答案指出应该避免虚拟方法,至少在 C++ 中),或者有比这两种方法更好的策略?
我想知道在 C# 中使用类时,触发和处理事件是否比覆盖方法对缓存更友好
一般来说,没有。事件将需要调用单独的类实例,该类实例将位于单独的内存位置。这将具有与虚拟方法调用相同(甚至可能更糟)的缓存问题。
或者有比这两种方法更好的策略吗?
不幸的是,惯用的 C# 往往是非缓存友好的。为了编写缓存友好的 C# 代码,您通常希望使用struct
over class
,避免虚拟方法,避免事件,避免委托(至少是带有闭包的委托)等。 Rico Mariani 有一篇关于基于值的编程的很好的博客文章,其中讨论了许多这些问题详细。