【问题标题】:DI/IoC Container Performance Benchmark Comparison?DI/IoC 容器性能基准比较?
【发布时间】:2011-03-15 17:27:07
【问题描述】:

我发现了一些 2008 年的基准测试结果,用于测试几个顶级 .NET DI/IoC 容器 here 的性能。但是我还没有找到任何更新的结果。是否有任何基准可以比较一些大型 IoC 容器(StructureMap、Unity、Ninject、Autofac、Castle Windsor 等)?

【问题讨论】:

  • 我同意里德的观点。此外,基准很容易出错。看看这个帖子的例子:stackoverflow.com/questions/5298240/….
  • 网络上缺少这样的新基准这一事实,我认为这是一个不太值得关注的声明。

标签: c# structuremap ioc-container ninject autofac


【解决方案1】:

我不建议使用性能基准来选择 IoC 容器。还有很多很多更重要的因素,例如功能集、开发路线图和可维护性等。

意识到您引用的基准在最坏的情况下仅显示超过 100 万次调用的速度差异是 3-4 倍。在“现实世界”场景中,DI/IoC 用于连接依赖关系,并且对整体应用程序性能的影响非常小,因为此构建阶段仅占整个运行时的极小部分。选择“高性能”还是“低性能”IoC 容器可能对应用程序的感知性能没有明显影响。

在性能对您的特定用例真正重要的不太可能的情况下,基准不太可能是衡量 IoC 容器性能如何影响您的有效衡量标准,因为基准往往偏向于特定的问题集。如果您真的认为这是一个严重的问题,我强烈建议您自己进行分析和测量。

【讨论】:

  • 插话一句,选择高性能和低性能 IoC 容器会对应用程序的感知性能产生巨大的影响,因为用户可识别的最小变化是 50 毫秒,而性能最好和最差容器之间的差异通常超过 50 毫秒。正是出于这个原因,我们个人从 Ninject 迁移到了 DryIoC 2.1.3。
  • 3-4 倍的差异并不是更新后的基准所显示的。例如,根据palmmedia.de/blog/2011/8/30/…,Ninject 与 LightInject 的差异可能超过 200 倍
【解决方案2】:

就我而言,IoC 容器的速度一直是一个重要因素。我有一个执行多次注入的应用程序,发现 Ninject 大大降低了应用程序的速度。取出 IoC 完全解决了性能问题。我将研究其他解决方案。

【讨论】:

  • 如果取出 IoC 容器解决了性能问题,您不妨试试Simple Injector。与手动更新对象图相比,Simple Injector 的性能开销很小(有时甚至更好),如 this benchmark 所示。
  • 了解 DryIoC 2.1.3
【解决方案3】:

IoC Container Benchmark - Performance comparison 有 20 多种产品的性能和特性比较表,并且是最新的(最新更新 21.12.2017)

文章的结论:

尤其是Simple Injector 似乎是个不错的选择。速度非常快, 有一个很好的文档,还支持高级场景,比如 拦截和泛型装饰器。

另请参阅相关的https://stackoverflow.com/questions/1140730/net-di-containers-comparison/ 问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2010-09-18
    • 1970-01-01
    • 2021-12-06
    • 2012-05-17
    • 1970-01-01
    相关资源
    最近更新 更多