ASP.NET MVC 3 Razor性能

sir*_*mak 64 c# asp.net-mvc performance razor asp.net-mvc-3

重要更新:请参阅底部的更新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
Run Code Online (Sandbox Code Playgroud)

剃刀有什么问题,它太慢了?

更新: 我重做了测试.所有4个测试虚拟目录都使用相同的.net 4集成模式应用程序池.所有项目都是通过添加新的空x项目并添加1页,其中包含1行文本而没有代码完成的.所有站点都以发布模式编译.我的系统是Windows 7,4 gb i7 4核心.我已经运行了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%
Run Code Online (Sandbox Code Playgroud)

更新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%
Run Code Online (Sandbox Code Playgroud)

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

System         Requests per second   CPU Utilization
----------------------------------------------------
mvc 3 rc2 razor               3940               58%
mvc 3 rc2 aspx                4100               58%
Run Code Online (Sandbox Code Playgroud)

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

mar*_*ind 26

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

感谢更新的号码.几点:

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

  • 没问题.测量性能时必须小心. (3认同)

Dar*_*rov 19

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