【问题标题】:Are events more cache-friendly code than virtual/overriden methods in C#?事件是否比 C# 中的虚拟/重写方法对缓存更友好?
【发布时间】:2013-05-30 01:08:03
【问题描述】:

阅读cache-friendly code in this SO question,我想知道在使用 C# 中的类时触发和处理事件是否比覆盖方法更易于缓存(因为其中一个答案表明至少应该避免使用虚拟方法在 C++ 中),还是有比这两种方法更好的策略?

【问题讨论】:

  • 尝试理解 为什么 虚拟不是缓存友好的。一旦你这样做了,显然事件会变得更加不友好。
  • 他们解决了完全不同的问题。我看不出它有什么可比性。也许您应该展示一个示例问题,然后使用事件和不使用事件来解决它。那么比较可能会更有意义。
  • @Servy,这是因为我创建了一个基 Form 类,它实现了在所有派生类中都被覆盖的虚方法,但我想知道是否可以更好地触发派生类中实现的事件而不是覆盖方法。

标签: c# performance events caching virtual-functions


【解决方案1】:

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

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

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

不幸的是,惯用的 C# 往往对缓存不友好。为了编写缓存友好的 C# 代码,您通常希望使用 struct 而不是 class,避免使用虚拟方法、避免事件、避免委托(至少具有闭包的委托)等。Rico Mariani 有一个很好的 blog post on Value based programming,它详细讨论了其中的许多问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    相关资源
    最近更新 更多