asp.net性能浅析

        此课程本来是要和小组的兄弟们共同分享的.由于时间的关系没有如愿以偿,今天就在网上和大家共同学习了.由不妥的地方请指出.
1.   ViewState
      
ViewStateasp.net中的一个特性,它用于把生成页面要用的一状态值保存在一个隐藏域中。当页面被回传到服务器时,服务器要解析,校验和应用ViewState中的数据以还原页面的控件树。ViewState一个非常有用的特性,它能持久化客户端的状态而不用cookie或者服务器的内存。大部分的服务器控件都是用ViewState来持久化那些在页面中与用户交互的元素的状态值。ViewState会带来一些负面的影响。首先,它加大的服务器的响应和请求的时间。其次,每次回传时都增加了序列化和反序列化数据的时间。最后,它还消耗了服务器更多的内存。 关闭指定页面的ViewState;

 
可以通过WebConfig来禁用整个WebViewState
<configration>
   
<system.web>
  
<pages enableViewState=false/>
   
</system.web>
</configuration>
ViewState的编码方式用的是Base64编码
EnableViewStateMac属性表示:
果页从客户端回发时,ASP.NET 应在页的视图状态上运行消息验证代码 (MAC),则为 true;否则为 false。默认为 false 视图状态 MAC 是页的视图状态在其发送到浏览器时所保存到的隐藏变量的加密版本。如果为 true,则检查加密的视图状态以验证该视图状态在客户端上是否尚未被篡改。如果主要考虑性能,则不要将
EnableViewStateMac  设置为 true 如果页面视图被篡改页面就不再使用这些状态去恢复页面 
2.页面跳转中的性能
请求的过程:
1)浏览器aspx文件请求--->服务器执行--->遇到Response.Redirect语句->服务器发送Response.Redirect后面的地址给客户机端的浏览器--->浏览器请求执行新的地址
2)浏览器aspx文件请求->服务器执行->遇到Server.Transfer语句->服务器转向新的文件
 可以见Server.Transfer比Response.Redirect少了一次服务器发送回来和客户端再请求的过程.
跳转对象:
1)Response.Redirect可以切换到任何存在的网页。
2)Server.Transfer只能切换到同目录或者子目录的网页.

数据保密:
1、Response.Redirect后地址会变成跳转后的页面地址。
2、Server.Transfer后地址不变,隐藏了新网页的地址及附带在地址后边的参数值。具有数据保密功能。
传递的数据量(网址后附带的参数):
1、Response.Redirect能够传递的数据以2KB(也就是地址栏中地址的最大的长度)为限。
2、传递的数据超过2KB时,务必使用Server.Transfer。
3.SessionState中的性能
提高ASP.NET应用程序还要显示的关闭会话状态,如果ASP.NET中不使用的话.要禁用页面的会话状态,可以在@page指令中设置:
<%@page Language=“C#” EnableSessionState=“False”%>
如果设置了这个属性在试图设置或者检索会话变量时,会抛出一个页面异常.建议对于不要求访问会话变量的任何页面禁用会话状态,视页面的大小,这会显著增加页面加载的时间,因为ASP.NET将不会发生处理ASP.NET会话所要求的状态管理开销.
如果页面要求访问会话变量但从来不操作这些变量,EnableSessionState的次优设置为”ReadOnly”.也就是说能访问它们 ,但是不能设置它们 .这样带来的性能增长不像完全禁用会话状态那样大,但好于启用全部的会话状态管理,该属性如此设置时如果试图设置一个会知变量,会抛出一个异常.可以通过WebConfig来禁用整个Web的会话状态.

Code
小结:
1.当不需要在服务器端的事件期间以编程方式和控件交互时,不要使用服务器控件.也就是说:如果信息在本质上是静态的,不需要与它交互,或者不从服务器的代码引用它.那么就应该使用标准的HTML.这样可以降低代码的大小 ,事件处理程序的数量,视图状态的大小和总的页面类的大小 ------所有这一切都可以提高ASP.NET Web页面的性能.
2.如果不需要,则关闭任何页面或整个网站的会话状态.
3.如是不需要,关闭任何页面或整个网站的视图状态.
4.不要忘记关闭调试.
5.显式的调用Dispose 方式告诉ASP.NET迅速收集不用的内在,通过显式的请求收回内存可以帮助垃圾收集进程.
4.页面缓存的使用
使用页面缓存可以大大提高我们程序的性能.
1%@ OutputCache Duration="60" VaryByParam="*" %> 
2
该示例将缓存用户控件 60 秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。
VaryByParam中的“*”指根据参数值的不同缓存不同的页面。“None”运行时只缓存请求的结果,不使用查询字符或窗体参数;
还有一个问题就是,我缓存了整个页面,但是这个页面上的某一些内容需要实时的显示出来,这个问题应该怎么样解决呢?例如:在当前网页面上我要显示出有多少人访问过这个页面.使用 Substitution 控件指定输出缓存网页要动态内容替换该控件的部分。Substitution 控件为要缓存大部分内容的页提供了一种缓存局部页的简化解决方案。可以对整页进行输出缓存,然后使用 Substitution 控件指定页中免于缓存的部分。 Substitution 控件执行时,会调用一个返回字符串的方法。该方法返回的字符串即为要在页中的 Substitution 控件的位置上显示的内容。使用 MethodName 属性指定要在 Substitution 控件执行时调用的回调方法的名称。
使用Substitution必须符合的标准:
    1.此方法必须定义为静态方法.
    2.此方法接受HttpContext类型的参数.
    3.此方法返回String类型的值.

注意:Substitution无法访问页面上的其他的控件.也就是说无法检查或更改其他控件的值

(作者:侯垒
posted @ 2008-01-27 14:19  侯垒  阅读(1139)  评论(2编辑  收藏  举报
Powered by: holly