【问题标题】:Owin + Unity container is bad performanceOwin + Unity 容器性能不佳
【发布时间】:2017-03-17 02:41:10
【问题描述】:

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

  1. 简单 OWIN:平均 5-10 毫秒,最大响应 200 毫秒 II。欧文
  2. Microsoft Unity 容器:平均 15 毫秒,最大响应 9000 毫秒。

性能图表

我有 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 容器的使用或问题出在哪里?

【问题讨论】:

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


    【解决方案1】:

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

    对于到达控制器的每个请求,您将实例化所有依赖项,即使您根本不需要它们。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      相关资源
      最近更新 更多