定制钩子:虚拟功能或事件?

Pet*_*ter 0 c# performance

性能和设计明智的优点和缺点

使用密封类和事件或使用具有虚函数的抽象类?

事件中只会有一个听众......

Dan*_*ert 5

您不应过分关注抽象类,继承和事件订阅方面的性能.这些语言结构旨在使开发和维护更简单.它们的设计并非完全考虑到性能.

在性能方面,有更好的事情需要担心.我想到了一些事情:

  • 拳击和拆箱 - 如果你做了很多重复或迭代的任务,尽量避免装箱和拆箱太多.
  • 引用类型值类型 - 创建为"结构"的对象按值存储.这意味着在内存中发送时传递对象的整个值.这可能更昂贵,但其寿命更具确定性,因此它通常只在某些范围内存在.创建为"类"的对象通过引用存储.通过代码发送引用对象时,只发送对象的引用,这意味着要移动的内存较少.缺点是因为它被分配给堆,它在内存中的寿命不太确定.
  • 订阅/取消订阅事件 - 这不仅仅是一个性能问题,而只是一个普遍的开发错误.除非所有事件都取消订阅,否则对象将不会被GC.如果保持订阅打开,则对象可能永远保留在内存中,从而导致内存泄漏.Microsoft在 WeakEvent模式上有很好的文档来帮助解决这个问题.

您还应该阅读Microsoft关于性能的MSDN文档.这对于理解.NET中真正的性能杀手来说是一个非常好的参考.密封和抽象类以及事件处理程序通常不是性能问题.

通常,代码结构更值得担心.考虑一下您如何处理数据以及您使用的哪些模式可能会很重要.