1、

(1、默认情况下ASP.Net是启用ViewState的,这样在页面中会生成冗长的隐藏字段,ViewState对于需要PostBack处理的页面才可能有用,对于新闻展示页面不需要交互完全没必要用ViewState。

(2、禁用ViewState的方式:
• 页面整体禁用ViewState:在顶部Page中EnableViewState="False"
• 指定控件禁用ViewState,在控件上EnableViewState="False"

(3、页面禁用ViewState以后并没有完全去掉ViewState,只要ViewState不是很大就可以了。如果要求一点儿ViewState都不能有,那么则页面中不能有runat=server的form,如果页面中没有表单元素,把form完全去掉就可以。如果Button等服务端控件没有放到runat=server的form中,那么则是不可用的。

2、cache

(1、如果每次进入页面的时候都查询数据库生成页面内容的话,如果访问量非常大,则网站性能会非常差。而如果只有第一次访问的时候才查询数据库生成页面内容,以后都直接输出内容,则能提高系统性能。这样无论有多少人访问都只访问一次数据库,数据库压力不变。

缓存是一种用空间换取时间的技术,存在于计算机中很多地方,用来将一些慢速设备中的常用数据保存在快速设备中,取数据的时候直接从快速设备中取。比如CPU二级缓存、windows文件读取缓存。

缓存存在失效的问题:为了保证从缓存中读取数据和慢速数据中数据一致,则需要在慢速数据中对应的数据发生变化的时候,清除缓存中相应的数据。
缓存是改进网站性能的第一个手段,就像索引是改进数据库性能的第一个手段一样。
ASP.net缓存主要分为:页面缓存、数据源缓存、数据缓存这三种主要类型。

(2、页面缓存

给页面添加下面的标签就可以启用页面缓存,

<%@ OutputCache Duration="20"  VaryByParam="none"%>

这样整个页面的内容都会被缓存,页面中的ASP.Net代码、数据源在缓存期间都不会被运行,而是直接输出缓存的页面内容。 Duration表示缓存时间,以秒为单位,超过这个时间则缓存失效,再次生成以后会再缓存20秒,以此类推。在Page_Load处设置断点、修改数据库数据测试。
      缓存是针对所有这个页面的访问者。这样1个访问者和1万个访问者、一次访问和100万次访问对数据库的压力是一样的。

***对于看新闻页面来讲,如果如上设置的话,则会缓存在第一个看到的新闻,因为?id=2、?id=3只是页面的不同参数而已,为了能让不同的新闻各自缓存,因此可以设置VaryByParam="id"表示对于不同的id参数进行单独缓存如果有多个确定缓存的参数,则将参数名用分号隔开即可,比如VaryByParam="id;number"。
      如果想让任何不同的查询字符串都创建不同的缓存,则设置VaryByParam="*",一般情况下设置“*”就足够。
      在WebUserControl中也可以像页面缓存一样设置控件的缓存。

(3、 数据源缓存
      设定ObjectDataSource的CacheDuration(缓存时间:秒),EnableCaching=true。这样每隔CacheDuration指定的时间段才调用SelectMethod指定的方法来执行数据库查询,其他时候都是直接返回缓存的数据。

缓存固定的时间适用于首页、文章列表等访问频繁的页面,对于看贴页面则不适合,假设有100万个帖子,如果每个帖子都是固定缓存1小时的话,假设一小时之内有10万个帖子被看了,那么就要缓存十万个帖子,非常占用内存,因为“百年一看”的“坟帖”偶然被访问一次也缓存一个小时,占用内存。这时候可以采用“滑动窗口(sliding)”策略,比如帖子缓存10分钟,如果10分钟之内又访问了,则缓存的失效时间修改为从被访问这一刻起的10分钟之后,以此类推。这样经常访问的帖子就可以“长期缓存”,而不经常访问的帖子也不会因为偶然访问而长期占用缓存。设置方法,数据源:CacheExpirationPolicy="Sliding"。面试可聊。todo:貌似滑动有问题。不是问题,Sliding只是策略,服务器会参考。

(4、 缓存其他
     页面缓存、数据源缓存等内部都是使用HttpRuntime.Cache来实现缓存的,在一些页面缓存、数据源缓存完成不了的特殊的缓存要求中,可以直接调用HttpRuntime.Cache进行缓存。

(*)ASP.Net缓存默认是保存在内存中的,还可以配置保存到数据库中。大型网站还会配合使用Memcached等技术。
清除缓存。在缓存还未失效的时候可能需要立即清空缓存,让数据库的修改立即反映到界面中。ASP.Net没有提供现成的方法,可以使用Hack级别的代码。

3、错误页面

(1、当页面发生错误的时候,ASP.Net会将错误信息展示出来,这样一来不好看,二来会泄露网站的内部实现信息,给网站带来安全隐患,因此需要定制错误页,发生错误时显示开发人员定制的页面。404页面放点广告也是好的嘛。
配置web.config,配置system.web内的customErrors区域:

1 <customErrors mode="On" defaultRedirect="~MyErrorPage.aspx">
2 <error statusCode="403" redirect="~/NoAccess.htm" />
3 <error statusCode="404" redirect="~/FileNotFound.htm" />
4 </customErrors>

**mode三个可选值:On:总是显示定制错误页面;Off:不显示定制错误界面,直接显示调用堆栈等异常信息;

**remoteonly:对于本机的访问显示调用堆栈等异常信息,对于外部用户的显示定制错误页面

一般设置为RemoteOnly,这样发生错误的话,管理员可以在服务器的浏览器中看详细错误信息,普通用户看不到。

学习演示的时候mode设置为On,否则看不到定制页。可以在定义错误页中判断Request.UserHostAddress来设置某些ip看到异常信息,可以读取Session如果是管理员则可以看异常信息。

(2、error子元素设定对于不同状态码使用不同的错误页,很多网站把404做一个特殊的错误页。没有单独设置的状态码错误则显示defaultRedirect中指定的页面。
错误页即可以使用htm页面,也可以使用aspx页面。在aspx页面中可以用HttpContext.Current.Server.GetLastError()拿到异常对象。一般不要把异常信息显示给用户,而是使用后面讲的Log4Net等将异常记录到系统日志。

*****如果要在错误页面中拿到异常对象,比如customErrors中设置redirectMode="ResponseRewrite",因为默认是客户端重定向(redirectMode="ResponseRedirect"),在错误页面中就拿不到异常对象了。*****

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~MyErrorPage.aspx">
<error statusCode="403" redirect="~/NoAccess.htm" />
<error statusCode="404" redirect="~/FileNotFound.htm" />
</customErrors>

ASP.NET 学习笔记_13 viewstate 和 cache相关推荐

  1. ASP.NET 学习笔记_13 文章发布管理小系统

    母版页:SiteFont.Master 1 <%@ Master Language="C#" AutoEventWireup="true" CodeBeh ...

  2. ASP.Net学习笔记015--ASP.Net中使用Cookie

    ASP.Net学习笔记015--ASP.Net中使用Cookie 表单数据欺骗: 原理跟收到欺骗短信一样,移动信号塔[基站],伪装的移动信号塔会屏蔽移动信号,并且 在信号范围内的手机会自动切换为接收伪 ...

  3. ASP.Net学习笔记014--ViewState初探3

    ASP.Net学习笔记014--ViewState初探3 为什么禁用了viewstate,还能修改label2的值 因为:viewstate只是记录label2的值,并不影响给label2进行设置 - ...

  4. ASP.Net学习笔记013--ViewState初探2

    ASP.Net学习笔记013--ViewState初探2 上课讲的viewstate,由于需要跟后台服务器进行传值,需要封装很多隐藏列,比如100条数据,就会有100个viewstate 如果用在一些 ...

  5. ASP.Net学习笔记008--ASP.Net揭秘之Input版自增补充说明

    以前写的课程都没有附上源码,很抱歉! ASP.Net学习笔记007ASP.Net Input版自增.zip http://credream.7958.com/down_20155694.html 1. ...

  6. ASP.Net学习笔记007--ASP.Net Input版自增

    2016/1/18 以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交流qq2群:170933152 也可以自己下载: ...

  7. ASP.Net学习笔记006--Get和Post的区别

    以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交流qq2群:170933152 也可以自己下载: ASP.Net学习 ...

  8. ASP.Net学习笔记005--ASP.Net的IsPostBack揭秘

    以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交流qq2群:170933152 也可以自己下载: ASP.Net学习 ...

  9. ASP.Net学习笔记004--基于ashx方式的ASP.Net开发1

    以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交流qq2群:170933152 也可以自己下载: ASP.Net学习 ...

最新文章

  1. 生产管理erp系统源码_仁和ERP企业管理系统提高生产管理流程
  2. 第五季1:AP模式USB-WIFI网卡移植与测试
  3. dskinlite自适应dpi
  4. uC/OS 的任务调度解析
  5. BZOJ4423: [AMPPZ2013]Bytehattan
  6. 使用jquery获取ul中当前正在点击的li的索引
  7. php数组和字符串转换
  8. 微信小程序远程git代码管理
  9. 从全面了解高级计量经济学体系+stata实操+实证研究前沿+论文+大数据机器学习+空间计量......._Stata高级计量经济学 陈强
  10. Python一个回合制兵棋小游戏(1)
  11. 线上活动重大事故总结
  12. 《Excel数据可视化:一样的数据不一样的图表》——导读
  13. mp4,m3u8,rtsp,rtmp,flv,直播流在线测试地址
  14. 硬盘安装Debian与Xp双系统
  15. 游戏直播软件测试工程师,【斗鱼TV软件测试工程师面试】斗鱼软件测试面试经验。-看准网...
  16. 关于37%结论的探索(最优停止理论,如何最优选择停止观望时机)
  17. 记录一次 Vue 组件封装过程
  18. 第三次电信重组大局初定(图)
  19. java 迷宫游戏_Java小项目之迷宫游戏的实现方法
  20. 一看身份证?我21了?没事,我还年轻。

热门文章

  1. SprimgMVC学习笔记(十)—— 拦截器
  2. SwipeRefreshLayout实现上拉加载
  3. 大道至简——失败也是积累
  4. ios中通过调试来使用私有api
  5. 如何在Eclipse中查看Android API源码以及support包源码
  6. YCbCr与YUV的区别
  7. jQuery给css增加!important
  8. JQuery对checkbox的操作
  9. CCF NOI1150 确定进制
  10. mysql event 学习