0

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

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当我想要更改通知(选择性慢)?或者 ...

  • 让一切虚拟化并notifyingPoco在上面滚动我自己的自定义类simplePoco(甚至更慢)?

  • 我不知道的设计模式?

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

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

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

4

1 回答 1

3

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

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

于 2009-08-14T20:30:35.033 回答