如何提高ASP.NET MVC Web应用程序的性能?

时间:2015-04-23 08:21:02

标签: asp.net-mvc web

如何提高ASP.NET MVC Web应用程序的性能?

我应该更加关注哪些领域?

在我的网络应用程序中包含数据库连接 API 图片解析等。

2 个答案:

答案 0 :(得分:4)

找出瓶颈并记住优化常见用例,而不是可以优化但尚未使用的内容。如果你不知道Amdahl's law,你应该看看它。将目标设置为运行速度提高1000倍,检查循环中的循环和/或是否获取的数据超出了所需数量。缓存还可以极大地提高性能。一个好的book关于这个被称为“创建更快的网站”和“更快的网站”,它告诉你很多如何优化网络。

答案 1 :(得分:1)

以下是一些提高ASP.Net应用程序性能的技巧。

视图状态

查看状态是一种奇迹机制,显示服务器上发布的条目的详细信息。每次从服务器加载它。此选项看起来像是最终用户的额外功能。这需要从服务器加载,它会增加页面的大小,但是当我们在页面中有许多控件(如用户注册)时,它会影响性能。因此,如果不需要它,则可以禁用它。

EnableViewState =" false"需要根据要求给出。它可以在控件,页面和配置级别设置中给出。

避免会话和应用程序变量

会话是一种存储机制,可帮助开发人员跨页面获取值。它将根据所选的会话状态进行存储。默认情况下,它将存储在Inproc中。默认设置使用IIS。当在多个数字访问的页面中使用此Session变量时,它将占用更多的内存分配并为IIS提供额外的开销。它会使性能变慢。

大多数情况都可以避免。如果您想跨页面发送信息,那么我们可以使用Cross Post--back,带有加密的查询字符串。如果要在页面中存储信息,则缓存对象是最好的方法。

使用缓存

ASP.Net具有缓存机制的非常重要的特性。它提供了更高的性能并避免了客户端/服务器进程。 ASP.Net中有三种类型的缓存。

如果整页中有任何静态内容,则应将其与输出缓存一起使用。它的作用是将内容存储在IIS上。请求页面时,它将立即从IIS加载一段时间。类似地,片段分页可用于存储网页的一部分。

有效使用CSS和脚本文件

如果您有多个CSS文件用于多个页面中的整个站点,那么根据需求,可以使用不同的名称对其进行拆分和存储。它将最小化页面的加载时间。

图片尺寸

网站中过度使用图像会影响网页性能。加载图像需要时间,特别是在拨号连接上。可以在CSS颜色上完成,也可以在所有页面中重复使用轻量级图像,而不是使用背景图像。

基于CSS的布局

整个网页设计由CSS使用div标签而不是表格布局来控制。它显着提高了页面加载性能。它将有助于在整个网站中实施相同的标准指南。它将轻松减少未来的变化。当我们使用嵌套表格布局时,渲染需要更多时间。

避免往返

我们可以避免不必要的数据库命中来加载数据库中未更改的内容。我们应该使用IsPostBack方法来避免往返数据库。

使用JavaScript验证

手动验证可以在客户端浏览器上完成,而不是在服务器端完成。 JavaScript帮助我们在客户端进行验证。这将减少服务器的额外开销。

插件软件有助于在客户端浏览器中禁用编码。因此,敏感应用程序应该在进入流程之前进行服务器端验证。

清除垃圾收集

通常.Net应用程序使用垃圾收集来清除内存中未使用的资源。但是从内存中清除未使用的对象需要时间。

有许多方法可以清理未使用的资源。但并非所有方法都是推荐的。但是我们可以在finally块中使用dispose方法来清理资源。此外,我们需要关闭连接。它将立即释放资源并在内存中提供空间。

避免在客户端存储批量数据

尽量避免在客户端提供更多数据。它会影响网页加载。当我们在隐藏控件上存储更多数据时,它将被加密并存储在客户端。它也可能被黑客篡改。

实施动态广告

当我们将大量记录加载到服务器数据控件(如GridView,DataList和ListView)时,加载需要一些时间。因此,我们只能通过动态分页显示当前页面数据。

使用存储过程

尝试使用存储过程。它们将提高网页的性能。因为它作为编译对象存储在数据库中,并使用查询执行计划。如果您传递查询,那么它将进行网络查询。在存储过程中,一行将传递给后端。

使用XML和XSLT

XML和XSLT将加快页面性能。如果该过程不复杂,那么可以在XSLT中实现。

使用数据集

与DataReader相比,DataSet不是轻量级的。但它具有断开连接的架构的优点。 DataSet将消耗大量内存。即使它可以有一天以上。如果要在加载页面本身时执行许多操作,那么最好使用DataSet。将数据加载到DataSet后,也可以在以后使用它。

使用String Builder代替String

当我们在服务器端追加邮件格式等字符串时,我们可以使用StringBuilder。如果使用字符串进行连接,它每次都会创建用于存储该字符串的新存储位置。它在内存中占用更多空间。但是如果我们在C#中使用StringBuilder类,那么它比String消耗更多的内存空间。

使用Server.Transfer

如果要在当前服务器中传输页面,那么我们可以使用Server.Transfer方法。它避免了浏览器和服务器之间的往返。但它不会更新浏览器历史记录。

使用主题

线程是编程中用于有效利用系统资源的重要机制。当我们想要进行后台处理时,它可以被称为后台进程。

考虑点击发送时的示例,它应该将邮件发送给5万个成员,但不需要等待所有进程完成。只需将邮件发送过程称为后台线程,然后继续进行进一步处理,因为发送邮件不依赖于任何其他进程。

- >你也可以使用" ReSharper"与视觉工作室进行更好的调整。 (https://www.jetbrains.com/resharper/