2

我们有一个生产 Web 应用程序 (ASP.NET MVC)。该应用程序是 2 年前开发的,并使用 Ninject 作为 DI 容器。

查看性能结果,我们有动力将 Ninject 替换为 LightInject。我们之前已经在其他小型 Web 应用程序中做到了这一点,因此确信不会有任何技术障碍。

在单独的代码分支中,我们进行了更改并成功地将 Ninject 替换为 LightInject。Web 应用程序使用 LightInject 作为 DI 容器正常运行。

现在到了有趣的部分,我们得到了什么?

所以我想进行快速(非科学)性能分析。所以我在我的开发盒上使用了Prefix(这是一个很棒的工具),并手动捕获了运行这两个版本的 Web 应用程序的时间。忽略第一次运行和平均时间,每页运行 10 次。

在此处输入图像描述

结果并不那么令人鼓舞,让我想知道为什么?

我认为这些结果可能有以下可能性:

  1. 测量的 UI 页面数量较少。
  2. 使用的绩效衡量技术是手动的,不科学的。
  3. 我们在 Web 应用程序中使用 DI Container 的方式,使用 Ninject 或 LightInject 并不重要。如果是这种情况,我们不想替换它(因为替换会影响完整应用)。为了确立这一点,我们需要更多的科学成果。

我想在服务器上使用前缀,但我们托管在 AWS Elastic Beanstalk 中。

我只需要一些性能矩阵来确定在我们的案例中是否值得切换到 LightInject。

对此有何建议?

4

1 回答 1

3

您不应期望在这里看到与在 IoC 基准测试中看到的相同的性能差异。由于 Web 应用程序中还有很多事情要做,因此可能很容易声称差异可以忽略不计。不过,这种思维方式可能是一个滑坡。每一项增加的成本都将在持续快速增长的总成本中所占的比例越来越小。每毫秒都很重要。如果您看一下 Kestrel,它是 .Net Core 的新 Web 服务器,它已经采取了极端措施来在吞吐量和内存使用方面挤出最大性能。内存分配和并发效率也是应该衡量的非常重要的因素。

于 2016-07-14T09:09:18.063 回答