【问题标题】:Virtual vs Interface poco, what's faster?虚拟 vs 接口 poco,哪个更快?
【发布时间】:2010-11-19 18:43:34
【问题描述】:

我正在维护一个设计如下的应用程序:

messy code --abuses--> simplePoco (POCO data capsule)

数据胶囊是一个简单的类,包含许多 getter 和 setter(属性)。它使用 DI 框架并始终使用 IoC 容器来提供数据胶囊的实例(真幸运!)。

问题是,我需要在simplePoco中引入“变更通知”机制

messy code --abuses--> simplePoco 
               |
               V
         changes logger,
         status monitor
     (I wanna know about changes)

我有几个选择:

  • 引入IPoco 并修改乱码,以便我可以有simplePoco 用于速度或notifyingPoco 当我想要更改通知时(选择性慢)?或...

  • 将所有内容都虚拟化并在simplePoco 之上滚动我自己的自定义notifyingPoco 类(甚至更慢)?

  • 我不知道的设计模式?

这是一个客户端/服务器系统,但我只是在修改服务器部分,所以如果可能的话,我宁愿接触凌乱的代码或客户端代码(有序列化程序和反射以及可怕的忍者东西......)以免意外破坏任何东西。

使用接口会阻止 JIT 内联对 getter/setter 的调用吗?

考虑到 simplePoco 实例被大量滥用,最好的方法是什么?

【问题讨论】:

    标签: interface virtual poco inlining


    【解决方案1】:

    任何类型的虚拟调用(无论是在接口上还是直接在类上 - 所有接口调用都是虚拟的!)不会被 CLR JIT 内联。也就是说,接口调用稍微慢一些,因为它们必须始终通过潜在的远程/代理路径,并且因为它们必须在进入函数体之前将this-pointer 指向类的开头。直接对类成员的虚拟调用永远不必进行转换,除非该类是从 MarshalByRefObject 派生的,否则不要进行代理检查。

    也就是说,这两者之间的性能差异非常小,因此您可能应该忽略它们,而专注于设计的简洁性和易于实施。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-23
      • 2020-08-04
      • 2011-06-12
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      相关资源
      最近更新 更多