ASP.NET MVC 3 Razor性能

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

我已经做了一个简单的hello世界项目在asp.net mvc2,3 aspx和3razor和基准。 我所看到的是:

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 

剃刀有什么问题,这么慢?

更新:我已经重做了testing。 所有4个testing虚拟目录使用相同的.net 4集成模式应用程序池。 所有项目都添加新的空x项目,并添加1页面,1行文本,没有代码。 所有网站都以发布模式编译。 我的系统是Windows 7,4 GB的i7 4核心。 我已经跑了testing2次来预热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(通常有很多caching调优我们)。 我们预计在最终发布之前,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在发布模式下完成的所有testing,但问题是我的web.config文件中的debug="true" (也影响发布版本),将其更改为false后,修复问题。 它是如何影响这个规模的剃刀模板是很有趣的。 这应该在我们的部署的头脑。

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

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

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

感谢您更新的号码。 几点:

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

你是如何执行基准的? 您的网站是否在IIS模式下部署? 您是否在machine.config中使用了<deployment retail="true" />部分? 另外请记住,ASP.NET MVC 3仍然在大力发展,所以你不能指望它已经完全优化了。 至less要等到它碰到RTM。