【问题标题】:Interface vs Abstract performance c# [closed]接口与抽象性能c# [关闭]
【发布时间】:2018-12-16 04:00:48
【问题描述】:

假设我有一个接口包含 3 个方法,即 m1()、m2()、m3(),我有一个抽象类只包含抽象方法,即 m1()、m2()、m3()。假设这个抽象类或接口将来不会改变。在这种情况下,我应该更喜欢什么,为什么?它们中的任何一个都有更好的性能吗?

【问题讨论】:

  • 您在寻找哪种更好的性能?时间?内存使用情况?我问是因为你最适合衡量自己,但考虑一下你现在是否真的需要知道:ericlippert.com/2012/12/17/performance-rant
  • 请查看这个帖子:stackoverflow.com/questions/7225205/… 有一些链接和性能测试。普遍的想法是接口需要比抽象类更多的动作来解析被调用的方法。
  • 覆盖抽象方法的具体类方法比接口实现更高效。该接口需要通过存根进行额外的跳转,通常只需一条 JMP 指令。很难回头看,一纳秒很难准确地描绘出来。界面的截然不同的设计含义并不使其成为应以性能为指导的任意选择。

标签: c# oop interface abstract


【解决方案1】:

以最简洁的方式编写您的代码,然后对其进行分析。如果它的性能不如您希望的那样好,请找到瓶颈并修复它。

接口和抽象类是不同的抽象机制。抽象类允许您在抽象类中执行一些工作并调用需要在派生类中实现的抽象方法。接口(还)没有任何实现,但一个类可以实现许多接口。如果您没有实现任何行为,只是声明公共形状必须是什么,请使用接口。

调用接口实现和抽象方法覆盖(或虚拟方法覆盖)在性能上几乎没有区别。事实上,我上次研究这个时,他们编译成相同的 IL。即使存在性能差异,与您的其他代码相比也可以忽略不计。

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2017-02-19
    • 2015-01-27
    • 2010-12-01
    相关资源
    最近更新 更多