我正在更新我的代码生成器,我可以选择是将方法 stub 实现为基类中的虚拟方法,还是在生成的代码中实现分部方法。两者在性能上有什么区别吗?
最佳答案
如果您实现分部方法,那么我希望不会有明显差异。 C# 始终使用 callvirt
来调用实例方法,即使它们不是虚拟的,因此不会有太大变化。
如果您不实现分部方法,那么调用本身将被删除 - 因此永远不会有堆栈需要准备等。这将无限更快,这就是为什么生成的代码可以包含大量可笑的部分方法 stub :如果您不使用它们,它们就不存在。
使用分部方法的一个更重要的原因就是您不必对对象进行子类化。您不能在同一个类中声明虚拟方法的“抽象”/“虚拟”和“覆盖”部分(即使是部分的)。部分方法解决了这个问题,以及广告扩展点的问题(无需使用反射)。
非常适合代码生成工具;-p
关于c# - 部分方法和覆盖基类中的虚拟方法之间的性能差异有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/339054/