當我有自動屬性,並嘗試從它的類中訪問它時,它看起來像一個開銷,因爲我使用一個函數來訪問我的類的成員,而不是直接訪問它。C#中的自動屬性是否會導致過度?
如果這是正確的,也許我應該考慮不要在這種情況下使用自動屬性?
當我有自動屬性,並嘗試從它的類中訪問它時,它看起來像一個開銷,因爲我使用一個函數來訪問我的類的成員,而不是直接訪問它。C#中的自動屬性是否會導致過度?
如果這是正確的,也許我應該考慮不要在這種情況下使用自動屬性?
您是否測量了任何理論開銷並發現它很重要?這是做出基於績效的決策的關鍵。
在這種情況下,我完全期望JIT內聯自動實現的屬性,消除任何性能開銷。 (我似乎記得看到的情況與float
/double
其中這不是的情況,但這是前一陣子 - 即使這樣的開銷是非常小的)
我剛測試過它,用'float' /'double'對它們進行了內聯。無論是在32位模式還是在64位模式下,setter和getter。 (CLR 4.0) – harold 2011-12-20 16:21:05
@harold:Goodo - 我懷疑這*可能*是CLR v2。當時我很驚訝:) – 2011-12-20 16:53:54
你是對的。然而,一些機制需要屬性,例如XML序列化程序不會序列化公共成員...
其他的事情是封裝 - 你永遠不會事先知道你的類的每個屬性的最終目的地是什麼,所以如果你創建它最初是作爲財產,你可以在稍後進入設置/獲取實施。
自動性能與普通的不同這方面的特性。
別擔心;無論如何,JITter通常會內聯屬性方法。
如果您遵循面向對象的原則,您可以通過允許直接訪問您的內部成員來違反封裝原則。 Property機制(getters和setters方法)爲這些成員提供適當的訪問權限,保護內部成員免受直接訪問。
它是如何開銷?你測過它了嗎?自動實現的屬性在編譯時重寫,因此執行時間應與手動實現的屬性完全相同。 – 2011-12-20 16:08:32
我不確定它是否關於自動屬性,但是當我將自動屬性添加到成員字段後,我確實有了很大的速度提升。 – nawfal 2012-12-04 19:24:23