关于c#:ASP.NET MVC 3 Razor性能

ASP.NET MVC 3 Razor performance

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

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

1
2
3
4
5
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核心。我已经运行了2次测试来预热iis,这些都是第二次运行结果。 apache bench参数:ab -n100000 -c1000
结果:

1
2
3
4
5
6
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在他的博客中回答:

We haven't fully optimized MVC3 yet (there is usually a lot of cache tuning we do). We expect razor to be the same performance as the .aspx view engine before it is finally released.

1
2
3
4
5
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在发布模式下完成的所有测试,但问题是我的web.config文件中的debug="true"(也影响发布版本),在将其更改为false后,问题已修复。有趣的是它如何影响这种规模的剃刀模板。这应该是我们在部署中的想法。

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

感谢asp.net mvc团队,出色的工作!


(回答你的RC2号码的新答案)

感谢更新的号码。几点:

  • 你的Aspx数字看起来很好,因为我们期望MVC3 Aspx与MVC2 Aspx相提并论(预计这样的Hello World示例会慢一点)
  • 你的剃刀号码看起来很可疑。我们知道Razor比等效的Aspx慢一点,但差异不应大于5%-7%。您的数字表示减慢50%,这与我们的结果不符。检查项目是否在Release中编译,并且您在web.config中设置了debug="false"
  • 您的CPU利用率有点可疑。对于1000个并发请求,CPU应该100%使用。 (因为你有8个虚拟内核,即使只有8个并发请求也应该足够)
  • 您的测试运行大约20-25秒。这有点偏低,因为系统中其他地方的短暂(1-2秒)突发活动可能会非常显着地甩掉你的结果。
  • 与第4点相关,您是一次还是几次运行每个方案?你看到结果差异很大吗?由于您的操作系统在后台执行其他操作,因此通常会在运行之间看到不同的结果。

  • 你是如何执行基准测试的?您的站点是否以模式发布部署在IIS上?你在machine.config中使用了部分吗?还要记住,ASP.NET MVC 3仍处于大量开发阶段,因此您不能指望它已经完全优化。至少等到它到达RTM。