2

如果我將擴展方法添加到程序中,它的成本是多少?
它會工作較慢或可能會加載速度較慢?
謝謝。擴展方法是否太貴?

+1

這是你可以通過編寫一個10行程序檢查自己的東西 – Andrey 2010-08-16 13:45:01

+0

如果執行速度稍微慢一點,這是否重要? – 2010-08-16 20:46:30

+1

Andrey,我同意,對於程序員來說,通過快速丟棄性能測試來調查非常具體的性能問題比在SO上提出問題更具啓發性。 – marr75 2010-08-16 20:48:53

回答

9

如果我將擴展方法 添加到我的程序 性能,它會花多少錢?它會工作較慢,或可能會加載速度較慢的 ?

不會有性能問題。擴展方法實際上是靜態方法。

1

它肯定不會加載得慢,因爲加載程序不依賴於程序中的執行路徑。

至於跑得慢多少?只有測量延長方法和非延長方法花費的時間才能確定。我懷疑這種差異即使實際可測量也不會很大。

重要的考慮因素應該是「擴展方法是否使我的代碼更清晰,更易於理解和維護」。

4

擴展方法只是應用於靜態方法的語法糖。

從理論上講,靜態方法比非虛擬實例方法更快(無需檢查空this),而該方法反過來比虛擬實例方法(無需查找實現來調用)更快。

理論上,優化也可以消除這些差異。在涉及到擴展方法時,它在靜態方面也被誇大了,因爲對象可能會以某種方式來處理,無論如何要求使用空值檢查(無論是明確的還是隱式的)。

在實踐中,無論擴展方法的確會產生更多的影響,無論是擴展還是實例,都有可能出現這種情況。

4

我很快在一個很長的運行循環中使用一些整數擴展方法對性能進行了測試,發現在我測試的情況下,性能通常是相同的。在調試或運行未優化的程序集時,擴展方法的運行速度大約是我的控件情況的兩倍,這很有意義,因爲調試程序不能內聯這些方法並必須跟蹤調用堆棧等。

因此,大會準備發佈,沒有性能損失。