2009-08-14 81 views
0

我維持它的設計是這樣一個應用程序:它採用了DI框架和始終如一地使用IoC容器提供虛擬vs界面poco,速度更快?

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

的數據膠囊是與許多getter和setter(屬性)的一個簡單的類數據膠囊的實例(幸運我!)。

的問題是,我需要引入一個「變更通知」機制引入simplePoco

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

我有幾個選擇:

  • 介紹了IPoco和修改亂碼,所以我可以有simplePoco的速度或notifyingPoco當我想要更改通知(有選擇地慢)?或...

  • 讓一切都變得虛擬並在simplePoco(甚至更慢)的基礎上滾動我自己的自定義notifyingPoco類?

  • 我不知道的設計模式?

它是一個客戶機/服務器系統,但我只是修改服務器的一部分,所以如果可能的話,我寧願不觸摸凌亂代碼或客戶端代碼會(有序列化和反射和可怕忍者的東西......),以免不小心破壞任何東西。

使用接口會阻止JIT內聯調用getter/setter?

什麼是最好的方式去考慮simplePoco實例沉重濫用?

回答

3

CLR JIT不會內聯任何類型的虛擬調用(無論是在接口上還是直接在類上 - 全部接口調用都是虛擬的!)。也就是說,接口調用稍微慢一些,因爲它們必須始終通過可能遠程/代理路徑,並且因爲它們必須在進入函數主體之前將類指向this-指向類的開頭。直接對類成員進行虛擬調用不需要進行轉換,除非類來自MarshalByRefObject,否則不要執行代理檢查。也就是說,這兩者之間的性能差異非常小,因此您應該忽略它們,並將精力集中在設計的清潔性和易於實現上。