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团队,出色的工作!
-
你是如何执行基准测试的?您的站点是否以模式发布部署在IIS上?你在machine.config中使用了部分吗?还要记住,ASP.NET MVC 3仍处于大量开发阶段,因此您不能指望它已经完全优化。至少等到它到达RTM。
-
+1 Darin - 不能指望alpha / beta阶段的产品能够完全优化。
-
这是一个非常合适的答案,你为什么要把它作为评论提交?
-
发表评论作为答案。
-
你可以在MVC3中禁用旧的ASPX ViewEngine吗?我想我在某个地方看到多个ViewEngines是MVC2中的主要性能问题,也许这个问题在MVC3中仍然存在,并且开销是问题的一部分?找到它会很有趣!
-
我看到你在Phil Haack关于RC2的博客上提出了这个问题。我们做了一些有意义的穿孔工作,所以你的数字应该有所改善。你能尝试新版本吗?
-
@marcind:我已经更新了基准测试。使用剃刀模板时出现问题。我有一个只有1行字符串的剃刀页面。在我用aspx重命名文件extesion的同一测试中,性能增益是我在更新中看到的两倍,这很有趣。
-
将响应作为新答案发布,因为RC2位几乎就是RTM。
-
回复:更新5 - 哦男人:/
-
@upthecreek:所有测试都是在发布模式下完成的,我没想到web.config中的默认设置也会影响发布版本。有趣的是它是如何在这种规模上影响剃刀模板(不是aspx)的。
(回答你的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点相关,您是一次还是几次运行每个方案?你看到结果差异很大吗?由于您的操作系统在后台执行其他操作,因此通常会在运行之间看到不同的结果。
-
非常感谢Marcind,#2解决了这个问题,我在所有测试中都在发布模式下编译但没有在web.config中设置debug = true。将其设置为false可解决此问题。我正在更新我的问题,并发表评论给haacked的博客。在那个chage之后,剃刀中的rpc是3940。
-
没问题。测量性能时必须小心。
你是如何执行基准测试的?您的站点是否以模式发布部署在IIS上?你在machine.config中使用了部分吗?还要记住,ASP.NET MVC 3仍处于大量开发阶段,因此您不能指望它已经完全优化。至少等到它到达RTM。
-
是的,在iis 7.5的发布模式下。我已经使用ab(Apache基准测试)进行了测试,并使用500 - 1000个客户端运行了50,000个请求。我测试了两次,这些数字是第二个结果(第一个是较低的)。我知道它正在开发中,但不确定优化后可能获得3倍的性能提升。
-
你为什么确定不可能有3倍的受害者? ASP.NET团队已经声明Razor解析器尚未优化。
-
Beta 1发布,razor rps降至1550。
-
@sirmak我们知道当前Beta位的某些性能问题。您是否重新运行了所有3种配置的测试,或者只是在MVC 3上重新运行Razor(如果机器处于不同的负载下,那么运行可能无法比较)。您的测试应用程序真的只是一个简单的Hello World页面吗?我发现令人惊讶的是Razor和ASPX之间的差异是如此之大,考虑到当你有一个非常简单的页面时,渲染时间相对较小。
-
它是一个简单的问候世界测试和CPU使用约。用于剃须刀的4芯i7上的%40。我记不起aspx cpu用法了。我在Windows 7上以相同的条件运行所有测试,并且示例应用程序是相同的空项目。我将为所有人做一个全新的测试,并回到你的更多细节。
-
嗨,我重做了测试并更新了我的问题。
-
我可能会建议运行一些更复杂的例子。它可能使事物看起来更均匀或更少,但它至少更现实
-
@Michael:一个带有单个控制器的空项目和一个页面显示了系统的最小开销,我认为我的基准没有问题。
-
@sirmak,我建议你通过一个复杂的例子来增加这个。视图引擎可能无法按照您的预期进行扩展
-
@Michael:好的,你是对的