我们有一个使用温莎城堡多年的大型 Web 应用程序。该应用程序有超过 370 个服务的大约 700 个组件注册。它们几乎都属于根,即入口点控制器。当一个网络请求到来时,我们解析那个入口控制器并让它处理请求。问题是解析根组件大约需要 35 毫秒。我会说这对我来说听起来很多。
我的问题是上面的数字听起来正常吗?谁能告诉我我可以做些什么来改善解决时间?或者检查我是否做错了什么?
谢谢 :)
我们有一个使用温莎城堡多年的大型 Web 应用程序。该应用程序有超过 370 个服务的大约 700 个组件注册。它们几乎都属于根,即入口点控制器。当一个网络请求到来时,我们解析那个入口控制器并让它处理请求。问题是解析根组件大约需要 35 毫秒。我会说这对我来说听起来很多。
我的问题是上面的数字听起来正常吗?谁能告诉我我可以做些什么来改善解决时间?或者检查我是否做错了什么?
谢谢 :)
解析一个对象图需要多少时间取决于很多因素,例如:
因此,如果没有更多信息,那就没什么好说的了。但是,我会说 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 并存储传入的依赖项。通过这种方式,您可以放心地组合您的对象图。
顺便说一句,您可以在此处找到更广泛的基准。