2015-04-23 77 views
0

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

哪些是我应该多加小心的领域?

在我的Web应用程序包含数据库连接API图像解析

+3

首先,您需要确定您站点中潜在的性能瓶颈,为此,您需要执行一些性能测试。有很多工具可以做到这一点。一旦你确定了这些问题,那么你可以修复它们。 – mattytommo

+0

你能否给我推荐任何**性能测试工具**。 我使用Google (https://developers.google.com/speed/pagespeed/insights/)工具, 这对于性能测试有好处吗? –

+0

嗯,这里有ANTs Profiler,我认为这对分析.NET应用程序来说太棒了。使用30天的试用,看看它是否给你任何东西。从SQL的角度来看,只需使用SQL事件探查器来捕获主要进程的跟踪,然后就可以通过调整顾问来运行它,以查看它的建议。然后你可以使用类似WebLoadUI或类似的东西来自动化一些负载测试,它会告诉你什么是首先在负载下崩溃。 – mattytommo

回答

3

查找瓶颈,记得优化,可以优化,但ISN,而不是某事物的共同使用的情况下还没用过。如果你不知道Amdahl's law你应该看看它。设定您的目标,以更快的速度运行1000次,循环检查循环和/或获取更多数据。缓存也可以极大地提高性能。一个好的book关于这个被称为“创建更快的网站”和“更快的网站”,它告诉你很多如何优化网络。

1

以下是一些提示您的ASP.Net应用程序性能的提示。

视图状态

视图状态是奇迹的机制,显示贴在服务器上的条目的详细信息。每次ifrom服务器都会加载它。该选项看起来像是最终用户的额外功能。这需要从服务器加载,并向页面添加更多大小,但当页面中有许多控件(如用户注册)时,会影响性能。所以,如果没有必要,那么它可以被禁用。

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

避免会话和应用程序变量

Session对象存储机制,有助于开发人员能够利用整个页面的值。它将根据所选的会话状态进行存储。默认情况下它将被存储在Inproc中。该默认设置使用IIS。当这个Session变量用在被许多数字访问的页面中时,它将占用更多的内存分配并给IIS带来额外的开销。它会使表演变慢。

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

使用缓存

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

如果整个页面中有任何静态内容,那么它应该与输出缓存一起使用。它所做的是将内容存储在IIS上。当请求页面时,它将立即从IIS中加载一段时间。同样可以使用片段分页来存储网页的一部分。

有效利用CSS和脚本文件

如果您有用于整个网站中多个页面,然后根据需求大CSS文件,它可以被分割并存储不同的名称。它将最小化页面的加载时间。

图片大小

过度使用网站中的图片会影响网页的效果。加载图像需要时间,特别是在拨号连接时。除了使用背景图片之外,还可以在CSS颜色上完成,或者在所有页面中重复使用重量轻的图片。

基于CSS布局

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

避免往返

我们可以避免不必要的数据库访问加载在数据库中的内容不变。我们应该使用IsPostBack方法来避免往返数据库。使用JavaScript

手册验证

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

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

清除垃圾收集

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

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

避免散装数据存储

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

实现动态寻呼

当我们大量的记录加载到像GridView控件,DataList控件和ListView服务器数据控件需要时间来加载。所以我们只能通过动态分页显示当前页面数据。

使用存储过程

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

使用XML和XSLT

XML和XSLT将加快页面的表现。如果这个过程并不复杂,那么它可以在XSLT中实现。

使用数据集

与DataReader相比,DataSet不是轻量级的。但它具有断开架构的优点。一个DataSet将消耗大量的内存。即使它可以有一天以上。如果你想在加载页面时执行很多操作,那么使用DataSet可能会更好。一旦数据加载到DataSet中,它也可以在以后使用。

使用字符串构建到位串

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

使用Server.Transfer的

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

使用线程

线程是程序设计的一个重要机制,有效地利用系统资源。当我们想要做一个后台进程时,它可以被称为后台进程。

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

- >您也可以在Visual Studio中使用“ReSharper”以进行更好的调整。 (https://www.jetbrains.com/resharper/

+0

其中一些实际上是与WebForms相关的,这是MVC(视图状态,动态分页等) – mattytommo