ASP.NET MVC性能

ASP.NET MVC Performance

我发现ASP.NET MVC比ASP.NET WebForms快30倍。 有什么真正的性能差异,这是衡量和性能的好处。

这是为了帮助我考虑从ASP.NET WebForms迁移到ASP.NET MVC。


我们还没有进行必要的可扩展性和性能测试,以得出任何结论。我认为ScottGu可能一直在讨论潜在的性能指标。随着我们向Beta和RTM迈进,我们将在内部进行更多的性能测试。但是,我不确定我们的政策是关于发布性能测试的结果。

无论如何,任何此类测试都需要考虑实际应用......


我认为这将是一个难以回答的难题,因为这将取决于A)如何实现WebForms应用程序,以及B)如何实现MVC应用程序。在它们的"原始"形式中,MVC可能比WebForms更快,但是多年和多年的工具和经验已经产生了许多用于构建快速WebForms应用程序的技术。我愿意打赌,一位资深的ASP.NET开发人员可以生成一个可以与任何MVC应用程序的速度相媲美的WebForms应用程序 - 或者至少可以实现微不足道的差异。

正如@tvanfosson所暗示的那样,真正的区别在于可测试性和干净的SoC。如果提高性能是您最关心的问题,我认为这不是跳上WebForms并开始在MVC中重建的理由。至少在您尝试使用可用于优化WebForms的技术之前。


它将我的一个页面从2MB有效载荷减少到200k,只需删除视图状态并以编程方式使其可以使用提交的输出。

仅仅大小,即使处理相同,也会在每秒连接数和请求速度方面产生巨大的改进。


我认为许多认为WebForms本身就很慢或资源密集的人将责任归咎于错误的地方。当我被引入以优化webforms应用程序时,有9个时间中有很多地方应用程序作者误解了viewstate的目的。我并不是说视图状态是完美的或任何东西,但它很容易滥用它,而这种滥用导致了臃肿的视域状态。

这篇文章无法帮助我理解许多这些滥用行为。 https://weblogs.asp.net/infinitiesloop/truly-understanding-viewstate

为了在MVC和WebForms之间进行有效比较,我们需要确保两个应用程序正确使用这些体系结构。


我的测试显示MVC上的req / sec增加了2到7倍,但这取决于你如何构建webforms应用程序。只需"hello world"文本,没有任何服务器端控制,mvc的速度提高了约30-50%。


对我来说,MVC的真正"性能"改进是增加了应用程序的可测试表面。使用WebForms,很多应用程序很难测试。使用MVC,可测试的代码量基本上增加了一倍。基本上所有不易测试的是生成布局的代码。您的所有业务逻辑和数据访问逻辑(包括填充视图中使用的实际数据的逻辑)现在都可以进行测试。虽然我希望它的性能也更高 - 页面生命周期大大简化,更适合网络编程 - 即使它相同或稍慢,但从质量角度来看也值得转换。


我认为这里的问题是,无论ASP.Net MVC比旧webforms多快多少,它都不会有所作为,因为大部分时间都在数据库中。大多数情况下,您的Web服务器将占用0-10%的CPU使用率,只需等待您的数据库服务器。除非您的网站上获得了大量的点击,并且您的数据库非常快,否则您可能不会注意到很大的差异。


我可以找到的早期ASP.NET MVC开发的唯一具体数字是在这个论坛主题:

http://forums.asp.net/p/1231621/2224136.aspx

Rob Connery本人在某种程度上证实了ScottGu声称ASP.NET MVC每秒可以提供8000个请求的声明。

也许Jeff和他的工作人员可以从他们的网站开发中给出某种暗示。


与接受的观点相反,优化的webform使用完全杀死了MVC的原始性能。 Webforms已经针对服务html的任务进行了超优化,远远超过了MVC。

有关度量标准,请访问http://www.techempower.com/benchmarks/#section=data-r7&hw=i7&test=db

每个单独的比较mvc在列表的中低/低 - 上排名,而优化的webforms使用位于中上/下 - 低排名。

这些指标的轶事但非常严肃的验证,www.microsoft.com由webforms而不是MVC提供。这里有没有人相信如果它在经验上更快,他们就不会选择MVC?


使用visual studio创建的项目。一个是mvc4模板,另一个是WebForm(tranditional)。
当用WCAT进行负载测试时,这就是结果,

MVC4比WebForms慢很多,任何想法?

enter image description here

MVC4

  • 可以得到大约11圈
  • rps是2-cpu或4-cpu服务器都很低

enter image description here

WebForms(aspx)

  • 可以超过2500 rps

  • 已经发现性能杀手是MVC Bata或RC的错误。
    一旦我删除Bundles的东西,性能将得到改善。现在最新版本解决了这个问题。


大约一年前我开始在MVC工作,我受到启发但没有留下深刻印象。

我厌恶视图状态,并将其视为ASP.NET中所有邪恶的根源。这就是为什么我只是不使用它并且完全诚实为什么你呢?

我基本上采用了ASP.NET MVC框架概念,并以我自己的方式构建它。我改变了一些事情。我构建了我的控制器包装代码,或围绕动态重新编译的URL路由代码。

现在,我甚至会说ASP.NET MVC应用程序将根据您的使用方式更快。如果你完全放弃WebForms,那么因为ASP.NET生命周期和对象模型非常庞大,你会更快。

当你写作时,你正在实例化一支军队......没有等待,一大群物体将参与渲染你的观点。这比在ASPX页面本身表达最少量行为的位置要慢。 (我不关心视图引擎抽象,因为Visual Studio中对ASPX页面的支持是不错的,但我完全放弃了WebForms作为一个概念,基本上任何ASP.NET框架由于代码膨胀或无法改变连接我的应用程序的东西)。

我已经找到了依赖动态重新编译(System.Reflection.Emit)的方法,以便在需要时发出特殊目的对象和代码。执行此代码比反射更快,但最初是通过反射服务构建的。这给了我MVC风格的框架很棒的性能,但也非常静态类型。我不使用字符串和名称/值对集合。相反,我的自定义编译器服务将表单帖子重写为传递引用类型的控制器操作。在幕后,有很多事情要发生,但这段代码很快,比WebForms或MVC Framework快得多。

另外,我不写URL,我写的lambda表达式被转换成URL,后来告诉哪个控制器动作要调用。这不是特别快,但它打败了URL。就像你有静态类型的资源以及静态类型的对象一样。一个静态类型的Web应用程序?这就是我想要的!

我会鼓励更多人尝试这一点。


真的没有办法回答这个问题。 MVC默认使用Web窗体视图引擎,并且可以配置为使用任意数量的自定义视图引擎,因此如果要进行性能比较,则必须更加具体。


性能取决于你正在做什么...通常MVC比asp.net更快,因为Viewstate缺席,因为MVC默认使用Callback而不是Postback。

如果优化webform页面,您可以获得与MVC相同的性能,但这将是一项很多工作。

此外,它们是MVC(以及Webform)的很多功能,可以帮助您提高网站性能,例如组合和缩小您的CSS和javascripts,分组您的图像并将它们用作精灵,等等。

网站的性能在很大程度上取决于您的架构。一个干净的,关注度很好的分离将为您带来更清晰的代码,并更好地了解如何提高性能。

您可以查看此模板"Neos-SDI MVC模板",它将为您创建一个干净的体系结构,默认情况下会有很多性能改进(请查看MvcTemplate网站)。


enter image description here

我用一些基本代码做了一个小的VSTS负载测试实验,发现ASP.NET MVC响应时间比ASP.NET Webforms快两倍。上图是带有图表的附图。

您可以从此CP文章中详??细阅读此负载测试实验https://www.codeproject.com/Articles/864950/ASP-NET-MVC-vs-ASP-NET-WebForm-performance-compari

使用VSTS和telerik负载测试软件,使用以下规范进行测试: -

用户加载25个用户。

运行持续时间为10分钟。

机器配置DELL 8 GB Ram,Core i3

项目在IIS 8中托管。

项目是使用MVC 5创建的。

假设网络LAN连接。因此,此测试目前不考虑网络滞后。

测试中的浏览器选择了Chrome和Internet Explorer。

在测试期间进行多次读取以平均未知事件。 7读数和所有读数在本文中作为阅读1,2等发表。


推荐阅读