回答
除非您使用的是service locator,否則我懷疑這些開銷會產生重大差異。 (即使你是,它也不可能是重要的。)
使用構造函數注入和一個現代框架,解析器將在構造對象時被調用。大多數情況下,我懷疑你會發現具有依賴關係的對象是相對較高級別的組件,或者兩者兼而有之。
如果您使用的是IoC容器,並在緊密循環中創建對象的很多具有依賴性,你可能需要做一些優化。你總是可以描述或基準測試。
總之,我不會擔心它。
作爲一個概念的依賴注入不需要很高的開銷:它只是簡單地構造一個類,以便它可以在運行時構建到其他類的連接,而不是在代碼中進行硬連線。
當然,有很多方法可以構建運行時連接,這可能會帶來很高的開銷。避免這些方法。
依賴注入本身只是一個簡單的間接尋址,所以有開銷,但它確實很小。運行時模式匹配和解析是另一回事(但通常與依賴注入一起使用,它不像DI 要求這樣的額外;-)。
依賴注入不會帶來巨大的開銷。我相信你會在其他地方發現瓶頸。如果您擔心的是開銷過多,可能是C#不是您想要使用的語言。您使用C#來獲得它帶來的好處,它會提取一些您不想處理的細節。
與DI相同,它還具有使應用程序鬆散耦合等優點,這意味着它將在未來更容易維護。
http://www.codinginstinct.com/2008/04/ioc-container-benchmark-unity-windsor.html進行一些性能測試。每個測試運行1000000個創作。
請注意,基準測試顯示單例分辨率和瞬態分辨率:單例是在那裏您註冊了一個類的實例,例如(使用Unity):
container.RegisterInstance<IMyType>(new ConcreteMyType());
並且每次都返回此實例(這很快)。
瞬態是您只註冊類類型的地方,IoC框架將爲您完成creatnig的工作,例如, (在Unity中)
container.RegisterType<IMyType, ConcreteMyType>();
這需要更多的時間來返回一個單例。
就整體優化而言,依賴注入的開銷是小啤酒;其他性能瓶頸更可能是優化的事情。
架空VS testeable和維護的代碼...我選擇testeable和維護的代碼(你總是可以買一個更快的計算機)
=)
- 1. 使用依賴注入來注入依賴注入器
- 2. linq2sql使用依賴注入?
- 3. 使用依賴注入
- 4. 使用HTML導入的依賴注入
- 5. 依賴注入
- 6. 依賴注入
- 7. 依賴注入
- 8. 依賴注入
- 9. 依賴注入
- 10. 依賴注入
- 11. 依賴注入使用EJB註解
- 12. 使用Unity註冊UrlHelper依賴注入
- 13. 使用咕嚕注入你的依賴
- 14. 使用WCF代理的依賴注入
- 15. 使用Grails Spring DSL的依賴注入
- 16. 使用Ninject的多依賴注入
- 17. 使用ITypeConverter的AutoMapper依賴注入
- 18. 如何使用依賴於Kotlin的JavaScript進行依賴注入?
- 19. C#依賴注入 - 如何注入無源的依賴關係?
- 20. 依賴注入@protocol?
- 21. 依賴注入`trait`
- 22. 依賴注入akka.net
- 23. 依賴注入UserControl
- 24. Wicket依賴注入
- 25. MVC依賴注入
- 26. C#依賴注入
- 27. 依賴注入wcf
- 28. Spring依賴注入
- 29. Wcf依賴注入
- 30. 依賴注入context.getbeans
您可能需要重新狀態的問題,如使用「難道一個IoC容器可能會導致大量開銷「。很多人將DI作爲一般概念(即在運行時而不是編譯時指定依賴關係)和IoC容器作爲一種特定的DI策略進行區分。 – 2009-09-13 05:51:17