0

我们有一个使用温莎城堡多年的大型 Web 应用程序。该应用程序有超过 370 个服务的大约 700 个组件注册。它们几乎都属于根,即入口点控制器。当一个网络请求到来时,我们解析那个入口控制器并让它处理请求。问题是解析根组件大约需要 35 毫秒。我会说这对我来说听起来很多。

我的问题是上面的数字听起来正常吗?谁能告诉我我可以做些什么来改善解决时间?或者检查我是否做错了什么?

谢谢 :)

4

1 回答 1

3

解析一个对象图需要多少时间取决于很多因素,例如:

  • 对象图的大小
  • 组件的注册生活方式和这些生活方式在图中的位置(显然如果根对象是单例,解析真的很快)
  • 您在构造函数中所做的工作量

因此,如果没有更多信息,那就没什么好说的了。但是,我会说 35 毫秒。很多,即使对于温莎城堡来说也是如此。我在 6 个最常用的 DI 容器上运行了一个小型基准测试,同时解析了 881 个瞬态组件的对象图,最慢的容器(Ninject)花了 5 毫秒,而最快的容器(Simple Injector)花了 0.01 毫秒(在我的机器上)来解决这个问题图形。

Container       |  ms.
----------------+-----
Simple Injector | 0.01
StructureMap    | 0.50
Autofac         | 0.77
Unity           | 1.04
Castle Windsor  | 3.96
Ninject         | 5.03

从这个基准我会说 35 毫秒。使用 Castle Windsor 解决具有该大小的对象图有点慢。因此,请确保您的注入构造函数很简单,并且您只需检查 null 并存储传入的依赖项。通过这种方式,您可以放心地组合您的对象图

顺便说一句,您可以在此处找到更广泛的基准。

于 2014-09-27T11:13:00.643 回答