【问题标题】:ASP.NET MVC 3 Razor performanceASP.NET MVC 3 Razor 性能
【发布时间】:2011-04-19 05:48:29
【问题描述】:

重要更新:见底部更新 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工作台参数: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 所有测试都在发布模式下完成,但问题是我的 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 团队,干得好!

【问题讨论】:

  • 您是如何执行基准测试的?您的站点是否以 Release 模式部署在 IIS 上?您是否使用了 machine.config 中的 <deployment retail="true" /> 部分?还请记住,ASP.NET MVC 3 仍在大力开发中,因此您不能指望它会得到全面优化。至少等到它到达 RTM。
  • +1 Darin - 不能指望处于 alpha/beta 阶段的产品得到全面优化。
  • 这是一个非常合适的答案,你为什么要把它作为评论提交?
  • 你能在 MVC3 中禁用旧的 ASPX ViewEngine 吗?我想我在某处读到多个 ViewEngines 是 MVC2 中的主要性能消耗者,也许 MVC3 中仍然存在该问题并且开销是问题的一部分?发现这一点会很有趣!
  • 我看到你在 Phil Haack 的博客上就 RC2 提出了这个问题。我们做了一些重要的性能工作,所以你的数字应该会提高。你能试试新版本吗?

标签: c# asp.net-mvc performance asp.net-mvc-3 razor


【解决方案1】:

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

感谢更新的数字。几点:

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

【讨论】:

  • 非常感谢 Marcind,#2 解决了这个问题,我在所有测试中都以发布模式编译,但没有在 web.config 中设置 debug=true。将其设置为 false 解决了该问题。我正在更新我的问题,并在 haacked 的博客上发表评论。 rpc 中的 rpc 在 chage 之后是 3940。
  • 没问题。测量性能时必须小心。
【解决方案2】:

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

【讨论】:

  • 是的,在 iis 7.5 上处于发布模式。我已经使用 ab(Apache 基准测试)进行了测试,并使用 500 - 1000 个客户端运行了 50.000 个请求。我已经测试了两次,这些数字是第二个结果(第一个较低)。我知道它正在开发中,但不确定优化后是否有可能获得 3 倍的性能提升。
  • 为什么你确定 3x 优化是不可能的? ASP.NET 团队已经声明 Razor 解析器尚未优化。
  • Beta 1 发布,razor rps 降至 1550。
  • @sirmak 我们知道当前 Beta 位存在某些性能问题。您是针对所有 3 种配置重新运行测试,还是仅在 MVC 3 上重新运行 Razor(如果机器处于不同负载下,则运行可能无法比较)。你的测试应用真的只是一个简单的 Hello World 页面吗?我发现 Razor 和 ASPX 之间的差异如此之大令人惊讶,考虑到当您有一个非常简单的页面时,渲染所花费的时间相对较少。
  • 这只是一个简单的 hello world 测试,cpu 使用率约为。剃须刀的 4 核 i7 上的 %40。我不记得aspx cpu的用法了。我在 Windows 7 上以相同条件运行所有测试,示例应用程序是相同的空项目。我将为所有人进行全新的测试,并提供更多详细信息。
猜你喜欢
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多