asp.net 性能优化

时间:2021-10-19 20:40:00
在MSDN网络课堂中下载了一些九月份的网络讲座。有很多还是很有意义的。《ASP.NET系列讲座之一:性能与缓存》是由微软开发工具专家王立楠讲授。王先生的讲解非常清晰,课件也很详细,虽然是网络讲座,但Down下来的视频文件声音很清晰。仔细听了一遍,把其中的某些要点记录了下来。

此讲主要是介绍了一些tip,以提高ASP.NET的性能。以下就是讲座介绍的一些技巧:

一、避免不必要的执行操作

Page_Load和IsPostBack

在ASP.NET中,用户每次点击页面,包括点击页面上的控件,都会激发Page_Load事件。例如如下代码:

void Page_Load(Object sender, EventArgs e) {
// set up a connection and command here
if (!Page.IsPostBack) {
String query = "select * from Authors where FirstName like '%JUSTIN%'";
myCommand.Fill(ds, "Authors");
myDataGrid.DataBind();
}
} void Button_Click(Object sender, EventArgs e) {
String query = "select * from Authors where FirstName like '%BRAD%'";
myCommand.Fill(ds, "Authors");
myDataGrid.DataBind();
} 先抛开Page_Load事件中的if语句不管。在用户点击页面时,会执行Page_Load中的代码,它实现了查询数据表并将结果放到DataGrid中的功能。同时,我们在Button的Click方法中也实现了查询数据表并返回结果的功能,只是查询的数据表和条件略有不同。如果没有if语句,那么当用户单击Button时,它会先执行Page_Load,然后再响应Button的Click事件。显然此时执行Page_Load是没有必要的。为什么会这样呢?因为HTTP协议是瞬时断开的。只要数据传输完毕,HTTP协议就会断开浏览器和服务器的连接。每当用户做出新的操作时,如单击页面上的Button,又会重新连接页面,此时必然会响应Page_Load事件。 因此,我们需要在Page_Load中判断Page.IsPostBack的属性。该属性指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问。如果是首次加载,则为false;否则为true。所以这里的Page_Load代码表达的含义是:如果页面被首次加载,则执行if里面的代码;否则忽略。因此,当用户单击Button时,由于页面之前已经被加载,所以会跳过Page_Load里的代码,这就大大地提升了ASP.NET的性能。 二、关闭不必要的Session状态 ASP.NET使用Session来保存用户的相关信息,这些信息是保存在服务器端的。Session主要与客户授权相关。如果提供了Session状态,当每次调用页面时,都会首先查询Session状态,这必然影响了页面执行的性能。因此,如果你提供的只是普通的页面,和客户授权无关,应该关闭Session状态。也许有人认为页面的Session状态影响的性能是很微小的,几乎可以忽略不计。然而试想你要做的项目涉及到的页面非常之多,每次查询Session所耗费的时间,累计起来,对性能的影响仍然是可观的。关闭Session状态的方法是在ASP.NET的html代码中设置: <%@ Page EnableSessionState="false" %> 三、谨慎使用Server Control 1、不必要时可以不使用Server Control 在ASP.NET中提供了两种控件:Server Control和标准的HTML控件。HTML控件只响应客户端事件,而Server Control提供了RunAtServer属性,它会在服务器端建立对象的映射。它的功能比HTML控件更强大,但会损耗一定的性能。因此,在设计页面时,应根据实际的情况选择控件。如果只需要响应客户端事件,那么最好选择HTML控件,这会大大提高ASP.NET的性能。 2、不必要时可以关闭Server Control的ViewState ViewState与Session、Application一样记录的都是ASP.NET中的状态。但ViewState作用的范围只限于页面。对于相同用户相同页面,控件的ViewState是相同的。由于控件可能会用到不同的页面中,Server Control通过ViewState来记录不同的数据状态。 但是并非所有的Server Control都需要ViewState。例如一个DataGrid控件,如果我们只是将DataSet填充到该控件中,并不对其中的数据进行操作,就不需要设置ViewState。由于ASP.NET中是将Server Control的ViewState默认设置为true,因此我们需要对控件进行重新设置: <asp:datagrid EnableViewState="false“ runat="server"/> 如果要禁止页面所有Server Control的ViewState,则使用: <%@ Page EnableViewState="false" %> 四、不要用Exception控制程序流程 捕获异常对性能的损耗是众所周知的。因此能够避免Exception,最好不用。例如: try {
result = 100 / num;
}
catch (Exception e) {
result = 0;
} 上面的代码会捕获除数为0的异常。此时,完全可以用if语句来控制程序流程: if (num != 0)
{
result = 100 / num;
}
else
{
result = 0;
} 五、禁用VB和JScript动态数据类型 在ASP.NET中,为了保持对ASP的兼容,保留了VB和JScript的动态数据类型。但在C#和VB.NET中,是不能使用动态数据类型的。由于使用动态数据类型会大量的占用运行时CPU,因此会影响到程序的性能,因此建议关闭VB和JScript动态数据类型,方法是: <%@ Page Language="VB" Strict="true" %> 六、其它提高性能的技巧 1、使用存储过程数据访问
2、只读数据访问不要使用DataSet,而是使用SqlDataReader代替DataSet,因为SqlDataReader是read-only, forward-only
3、关闭ASP.NET的Debug模式

asp.net 性能优化的更多相关文章

  1. ASP&period;NET性能优化之减少请求

    在上篇<ASP.NET性能优化之让浏览器缓存动态网页> 中的方案中,浏览器发送If-Modified-Since将是否需要使用自己的缓存交给WEB服务器去决定,服务器告知浏览器去读缓存,浏 ...

  2. ASP&period;NET性能优化之分布式Session

    如果我们正在使用Session,那么构建高性能可扩展的ASP.NET网站,就必须解决分布式Session的架构,因为单服务器的SESSION处理能力会很快出现性能瓶颈,这类问题也被称之为Session ...

  3. ASP&period;NET性能优化小结&lpar;ASP&period;NET&amp&semi;C&num;&rpar;

    ASP.NET: 一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库 ...

  4. Asp&period;net性能优化技巧

    [摘 要] 我只是提供我几个我认为有助于提高写高性能的asp.net应用程序的技巧,本文提到的提高asp.net性能的技巧只是一个起步,更多的信息请参考<Improving ASP.NET Pe ...

  5. ASP&period;NET性能优化小结

    一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的 ...

  6. ASP&period;NET性能优化原则

    从哪些方面对asp.net进行性能优化,本文作了详细的阐述,希望对大家有所帮助. 一.SqlDataRead和Dataset的选择Sqldataread优点:读取数据非常快.如果对返回的数据不需做大量 ...

  7. asp&period;net性能优化之使用Redis缓存(入门)

    1:使用Redis缓存的优化思路 redis的使用场景很多,仅说下本人所用的一个场景: 1.1对于大量的数据读取,为了缓解数据库的压力将一些不经常变化的而又读取频繁的数据存入redis缓存 大致思路如 ...

  8. ASP&period;NET页面优化性能提升方法记录

    今天与大家分享:一种优化页面执行速度的方法.采用这个方法,可以使用页面的执行速度获得[8倍]的提升效果. 为了让您对优化的效果有个直观的了解,我准备了下面的测试结果截图: 测试环境:1. Window ...

  9. ASP&period;NET26个性能优化方法

    1.数据库访问性能优化 (1)数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源. ASP.NET中提供了连 ...

随机推荐

  1. KD-tree(2维)

    用于动态插入以及求某点的最近点的距离(BZOJ2648,BZOJ2716) #include <cstdio> #include <cmath> #include <al ...

  2. TAQSkinScrollBar 类美化滚动条再讨论

    再说:TAQSkinScrollBar 类美化滚动条,http://www.138soft.com/?p=156  里面有人提到不可以滚动 滚动的改善方法: unit AQSkinScrollBar; ...

  3. Sql Server 数据分页

    http://www.cnblogs.com/qqlin/archive/2012/11/01/2745161.html 1.引言 在列表查询时由于数据量非常多,一次性查出来会非常慢,就算一次查出来了 ...

  4. NEC学习 ---- 模块 -多行式面包屑导航

    如上面形式面包屑的写法: HTML如下, <div class="m-crumb"> <ul class="f-cb"> <li& ...

  5. ThreadLocal学习

    1.简介: 类ThreadLocal<T>,为变量提供了线程本地化副本.对于用ThreadLocal维护的变量,当前线程中的副本不同于它在其他线程中的副本,每个线程通过ThreadLoca ...

  6. 关于Java的发展前景

    各位看官觉得Java还能火几年?未来的发展方向是什么?

  7. BZOJ 2594&colon; &lbrack;Wc2006&rsqb;水管局长数据加强版 &lbrack;LCT kruskal&rsqb;

    2594: [Wc2006]水管局长数据加强版 Time Limit: 25 Sec  Memory Limit: 128 MBSubmit: 2917  Solved: 918[Submit][St ...

  8. 安卓开发笔记(二十四):手把手教你一步步集成腾讯X5内核(Tencent TBS X5)

    1.为什么要集成腾讯X5内核? X5内核相对于系统webview,具有下述明显优势: 1) 速度快:相比系统webview的网页打开速度有30+%的提升: 2) 省流量:使用云端优化技术使流量节省20 ...

  9. Ubuntu上安装使用WeChat、TIM

    WeChat可以直接到软件商店安装,不过是网页版...(其实个人感觉还行,就是什么都不能设置就挺蛋疼的,字体大小.背景什么的) 以下是网上找到的教程,在此总结一下: 下载地址:https://gith ...

  10. 关于const用法的学习

    被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:“Use const whenever you need”.1.const作函数参数 例如 ...