Owin + Unity容器性能不佳

时间:2016-12-22 08:49:02

标签: performance asp.net-web-api owin unity-container

我使用JMeter加载到我的WebApi。每个用户100个用户+ 4000循环。

  1. 简单OWIN:平均5-10ms,最大响应200 ms II。 OWIN
  2. Microsoft Unity容器:平均15毫秒,最大响应9000毫秒。
  3. 效果图表

    enter image description here

    我有OWIN自托管的WebApi + Microsoft统一容器。

    使用VS性能浏览器,我调查了热路径:

     public IDependencyScope BeginScope()
        {
          var childContainer = Container.CreateChildContainer(); //47% CPU
    
          return new UnityDependencyScope(childContainer);
        }
    
        public object GetService(Type serviceType)
        {
           if (typeof(IHttpController).IsAssignableFrom(serviceType))
           {
              return Container.Resolve(serviceType); //35% CPU
           }
    
           try
           {
              return Container.Resolve(serviceType);
           }
           catch
           {
              return null;
           }
       }
    
        public void Dispose()
        {
            Container.Dispose(); //16%CPU
        }
    

    如何优化Unity容器的使用或问题在哪里?

1 个答案:

答案 0 :(得分:0)

如果您的控制器依赖于太多的构造对象,则可能需要一些时间来构建所有对象图。

对于命中控制器的每个请求,即使您根本不需要任何依赖项,也要实例化所有依赖项。

您可以尝试将一个大型控制器拆分为较小的多个控制器,并重构对象图(依赖关系树)以使每个控制器保持最小值。