我正在维护一个设计如下的应用程序:
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实例被严重滥用,最好的方法是什么?
答案 0 :(得分:3)
任何类型的虚拟调用(无论是在接口上还是直接在类上 - 所有接口调用都是虚拟的!)都不会被CLR JIT内联。也就是说,接口调用稍微慢一点,因为它们必须总是通过潜在的远程/代理路径,并且因为它们必须将this
- 指针移动到类的开头,然后才能进入函数体。直接在类成员上进行的虚拟调用永远不必进行移位,除非该类派生自MarshalByRefObject
,否则不要进行代理检查。
尽管如此,这两者之间的性能差异非常小,所以您应该忽略它们,并专注于设计的清洁度和易于实现。