使用Prism的DI容器时,Unity和DryIoc之间没有功能上的区别,因此请比较性能。仅在DryIoc博客上比较DI容器的基准 出版了,所以我从中提取了DryIoc和Unity。
该基准是测量从每个DI容器中获取以下类型的类500,000次(解析)的时间(以毫秒为单位)的结果,较高的数字是单线程,较低的数字是多线程处理,这似乎是结果。
*以下类型的说明是从网络翻译中推断出的句子,因此可能与实际的句子有所不同。
- 单例:单例对象
- 瞬态:具有临时寿命的对象
- 合并的:具有两个依赖项(Singleton和Transient)的对象。
- 复杂:具有嵌套依赖关系的对象
- 泛型:具有泛型依赖性的对象
- IEnumerable:实现IEnumerable的对象
- 条件的:具有条件依赖性的对象
Container | Singleton | Transient | Combined | Complex | Generics | IEnumerable | Conditional |
---|---|---|---|---|---|---|---|
No | 41 49 |
49 59 |
69 76 |
99 103 |
70 75 |
193 176 |
53 63 |
DryIoc 4.0.7 | 36 49 |
56 79 |
57 102 |
76 89 |
58 83 |
326 232 |
58 78 |
Unity 5.11.1 | 231 160 |
1598 926 |
3599 1995 |
8365 4647 |
9191 5255 |
15421 8702 |
3319 1861 |
并且以上基准是2020/2/2更新的测量结果。它是与Prism 7.2版SR1中包含的Unity和DryIoc相同版本的基准,因此非常适合进行比较。
如果只看基准测试结果,DryIoc的速度要快得多,所以如果您要关注性能,可以选择DryIoc,但以上测量结果仅是DI容器的基准。并非总是能获得结果。
如您所见,Prism内置的DI容器仅在性能上有所不同,因此您可以选择它们只是因为它们具有良好的性能。最近的大多数管理员样本都选择了DryIoc。(DryIoc用于样本,例如该系列中的MVVM L @ bo和WPF UI Gallery)
但是,似乎有很多人使用诸如DI和Unity之类的搜索词来到此站点,因此在本系列中,我们将选择Unity作为DI容器,但是除非另有说明,否则我们将使用Unity或DryIoc。 ,说明不变。