不要IoC容器包括哪些性能开销?(What performance overhead do IoC

2019-08-17 17:18发布

松耦合是精彩当然,但我经常在想什么开销布线了动态的使用一种IoC容器(例如城堡温莎)具有在紧耦合系统?

我知道一个详细的答复将取决于正在使用什么样的国际奥委会,但我真的只是想获得参与国际奥委会工作努力幅度的感觉。

有没有人有这方面的任何统计数据或其他资源?

谢谢

Answer 1:

有一个关于性能链接
http://realfiction.net/?q=node/143
有一个结果

  • 正常施工:0.0001 / 0.0002
  • 激活建筑:0.0069 / 0.0071
  • 集装箱建设(温莎城堡):0.1014 / 0.1068
  • 集装箱建筑(Spring.NET):0.069 / 0.0722

但正如你所看到的温莎心不是最快的IoC (Autofac快得多)

正确的答案是,性能并不重要:)。
由于使用的IoC正确,当所有注册过程是在初始化阶段。
换句话说,使用的IoC必须减少你的“如果其他”实时计数。



Answer 2:

你必须慢初始化时间,当容器开始一切都被加载。 如果初始时间不要紧,你,每个人的上盘-A-运气轮赢家。



Answer 3:

了解IoC容器是多么复杂,最好的办法来自分析它。

在一个特定的经历,有一次我花了一整个下午调试使用一些简单的“Hello World”代码丛 ,这Maven是基于后( 这里是一个有用的链接,浏览它的源代码 )。 它有点想出了(通过看defaultPlexusContainer)为:

  • 类路径配置(通过classworlds)
  • 一个运行时环境变量(基本上是一个地图)的创建,以存储属性和变量
  • 配置解析(类路径上的元数据的模块的发现,等等)
  • 初始化:
    • 服务的构造/实例
  • 射击额外ComponentDiscoverers
  • 附加ComponentDiscovererListeners烧成

这使得一个重要方面,深入到上述步骤:找一个组成部分。 在丛,相位概念包装的对象建设的步骤,并且这些阶段通常被绑定到一个个性的概念。 然而,对于默认设置 ,这是通过执行以下几个阶段进行:

  • 对象实例化(即新的对象())
  • 登录使能(即,设置一个记录器为对象)
  • 组成:即依赖查找和设置
    • 二传手战略是一个有趣的问题,但我会离开这个细节现在
  • 语境的通过到所创建的对象
  • 对象的附加启动过程

大多数的这些步骤都是可选的,通常包括确定给定的接口,把它的目标对象上 - 这是对丛个性的默认,请注意。

此外,每个对象可以绑定到一个生命周期管理器,它主要是使一个新的对象和单身的区别。

在我的特定记录:最困难的部分实际上是在解析配置,并引导容器。 在这之后,你可能会注意到在性能上没有进一步的差异。



文章来源: What performance overhead do IoC containers involve?