64

重要更新:请参阅底部的更新 5 在 asp.net mvc 3 中没有性能问题,这是一个基准问题

我在 asp.net mvc2,3 aspx 和 3 razor 中制作了一个简单的 hello world 项目,并对它们进行了基准测试。我看到的是:

System                  Requests per second
-------------------------------------------
asp.net mvc 2 ASPX                     4200
asp.net mvc 3 Beta 1 ASPX              3200
asp.net mvc 3 Beta 1 Razor             1700

剃须刀怎么了,这么慢?

更新: 我已经重做了测试。所有 4 个测试虚拟目录都使用相同的 .net 4 集成模式应用程序池。所有项目都通过添加新的空 x 项目并添加 1 页与 1 行文本且没有代码来完成。所有站点都以发布模式编译。我的系统是windows 7, 4 gb i7 4 cores。我已经运行了 2 次测试来预热 iis,这些是第二次运行的结果。apache bench 参数:ab -n100000 -c1000 结果:

System         Requests per second   CPU Utilization
----------------------------------------------------
asp.net 4                     4780               43%
mcv 2                         4322               58%
mvc 3 beta 1 aspx             2324               54%
mvc 3 beta 1 razor            1615               54%

更新 2 Scott Guthrie 在他的博客中回答:

我们还没有完全优化 MVC3(我们通常会做很多缓存调整)。我们希望 razor 在最终发布之前与 .aspx 视图引擎具有相同的性能。

System         Requests per second   CPU Utilization
----------------------------------------------------
mvc 3 rc1 razor               1960               54%
mvc 3 rc2 razor               2187               54%
mvc 3 rc2 aspx                4014               58%

更新 5在发布模式下完成的所有测试,但问题出debug="true"在我的 web.config 文件中(这也影响发布版本),将其更改为 false 后,问题已修复。有趣的是,它只影响这种规模的剃刀模板。我们应该在部署时考虑到这一点。

System         Requests per second   CPU Utilization
----------------------------------------------------
mvc 3 rc2 razor               3940               58%
mvc 3 rc2 aspx                4100               58%

感谢 asp.net mvc 团队,干得好!

4

2 回答 2

26

(回复您的 RC2 号码的新答案)

感谢更新的数字。几点:

  1. 您的 Aspx 数字看起来不错,从某种意义上说,我们希望 MVC3 Aspx 与 MVC2 Aspx 相当(在这样的 Hello World 示例中预计会慢一些)
  2. 你的 Razor 数字看起来很可疑。我们知道 Razor 比等效的 Aspx 慢一点,但是,差异应该不大于 5%-7%。你的数字表明慢了 50%,这与我们的结果不符。检查项目是否在 Release 中编译,并且您debug="false"在 web.config 中进行了设置。
  3. 您的 CPU 利用率有点可疑。对于 1000 个并发请求,CPU 应该被 100% 使用。(即使只有 8 个并发请求也足够了,因为您有 8 个虚拟内核)
  4. 您的测试运行大约 20-25 秒。这有点偏低,因为系统中其他地方的短暂(1-2 秒)活动爆发可能会显着影响您的结果。
  5. 与第 4 点相关,您是否将每个场景运行一次或几次?您是否看到结果有很大差异?由于您的操作系统在后台执行其他操作,因此通常会在运行之间看到不同的结果。
于 2010-12-11T19:58:37.107 回答
19

你是如何执行基准测试的?您的站点是否以 Release 模式部署在 IIS 上?您是否使用了<deployment retail="true" />machine.config 中的部分?还请记住,ASP.NET MVC 3 仍在大力开发中,因此您不能指望它会得到全面优化。至少等到它到达RTM。

于 2010-09-30T08:37:43.820 回答