IoC/DI 這個概念,最初是由 Martin Fowler 提出來的。以後,很快在 Java 社區大行其道。在 .net 社區,IoC 的流行要比 Java 晚一些。儘管如此,如今開源社區中也已經出現了不少使用 .net 編寫的 IoC 框架,比較有表明性的有:Castle Windsor/Spring.net/Autofac/StructureMap/NInject/Unity...html
爲了解決一個相同的問題,相繼出現這麼多類似的框架(你們不厭其煩地重複造輪子),不能不說 IoC 的熱度實在不凡。但這也給咱們在選用 IoC 框架時帶來一些困難。這麼多可選項,到底選用哪一個比較好呢。git
有一個德國人 Daniel Palme 寫了一篇文章 IoC Container Benchmark - Performance comparison,試圖從性能和功能兩方面對他所知的一些現有 IoC 框架作出評判,爲此還專門在 github 上建了一個項目。github
做者看了他的代碼,以爲很能夠借鑑,遂把他的代碼拷貝過來,剔除了一些不能運行的項目(由於做者機器配置比較低,只能安裝 .net4.0,而測試中有些項目要求 .net4.5 才能運行),再把本身的 My.Ioc 框架加入測試中,也作了一個性能比較,跟 My.Ioc 源碼一塊兒上傳到 codeplex 中,感興趣的同窗能夠本身到這裏下載。框架
下面這張表格是做者在本身機器上測試的結果,僅供各位參考:性能
Container | Container | Request | Combined | Complex | Generics | IEnumerable | Conditional | Interception |
Ninject | 1760 | 2927 | 6372 | 17470 | 7100 | 13655 | 0 | 0 |
Unity | 511 | 569 | 1385 | 3876 | 0 | 6684 | 0 | 0 |
AutoFac | 418 | 875 | 1579 | 3723 | 1583 | 4123 | 0 | 0 |
MugenInjection | 420 | 394 | 550 | 1088 | 1281 | 1152 | 0 | 0 |
MyIoc | 198 | 204 | 224 | 292 | 222 | 410 | 0 | 0 |
SimpleInjector | 189 | 189 | 195 | 196 | 191 | 223 | 0 | 0 |
No | 183 | 182 | 185 | 189 | 0 | 0 | 0 | 0 |
至於 My.Ioc 的功能,若是您還想要進一步瞭解的話,請看這篇文章。測試