ASP.Net性能优化——页面数据缓存

导读:
  1 基本概念
  ASP.NET提供了一个相当出色的缓存引擎机制,它允许页面保存和索引HTTP请求所要求的各种各样的对象。ASP.NET的缓存对各个应用来说是私有的,是存储各种对象的存储器。缓存的生存周期取决于应用的生存周期,也就是说,当应用重新启动时,缓存实际上也已重建。
  缓存提供了一个简单的字典接口,以便于开发者能够轻而易举放置对象到缓存中,并在以后使用。最简单的情况下,放置一个对象到缓存中,就如同对字典增加一个条目。
  例如:
  1
  
  Cache(“myKey”)=MyValue2
  
  即是把MyValue放入缓存中一个叫myKey的缓存对象中,当需要引用myKey值时,可以采用下面的使用方式:3
  
  myValue1=Cache(“myKey”)4
  
  if myValue1 <> Null then
  5
  
  '非空时的动作
  6
  
  …7
  
  end if
  asp.net提供了三种缓存替换的策略:
  (1)“腐烂搜索”(Scavenging)
  比较类似于“最近最少使用”替换原则,当内存变得比教紧张时,缓存机制会找出最不常用和最不重要的对象,把它从内存中移出,以减轻系统压力。为控制“腐烂搜索”的具体行为,编程者必须在插入缓存对象时,指明插入它的耗费和多少时间内它必须被存取一次才能继续留在缓存中,以供替换时进行决择。
  (2)“到期控制”(Expiration)
  编程者可以指定缓存对象的生存周期,这种指定的时间可以是绝对的也可以是相对的。例如绝对的时间(下午6:00到期),相对时间(该对象距最近一次存取它的时间满10分钟即到期)。当一个缓存对象到期后,它将从缓冲内存中移出,此时对该对象的索引将得到null值,除非又重新插入该对象。
  (3)“文件和键值依赖”
  从外部文件或者是其他缓存键值是否改变,来决定本身键值是否有效。如果依赖发生改变,缓存对象将变得不可使用,并从缓存中移动出来。试想这样一种情况,应用从一个XML文件中读出金融信息,而该文件又被定期地修改。应用的作用是利用从该文件读出的信息构造一个图形对象以表示销售的情况。当应用读入文件时,它把数据插入缓存中,并记录下文件的依赖关系。当文件发生修改时,应用使开始产生的缓存对象无效并从内存中移出已经无用的数据,此后应用重新读入文件的数据,再把更新后的数据放入缓存,这样就完成了信息的更新,并返回给最终用户。
  2 实例
  例子:
  从一个XML中读出用户信息并显示在页面上,页面提供了两个按钮,一个为增加用户,一个为刷新。我们在内存中建立了一个缓存对象“DataCache5”,它与客户信息文件”custom1.xml”建立了依赖关系。当custom1.xml文件未发生变化时,我们按下“刷新”按钮,可以看到信息是从缓存中读出的;当我们输入客户相应的资料,增加了一个客户以后,再按下“刷新“按钮后,我们可以看到客户信息变成了从文件读出。
  (1)ASPX源程序:
  1
  
  
  2
  
  
  3
  
   <BR>  4 <BR>  <IMG src="http://fineboy.cnblogs.com/Images/OutliningIndicators/None.gif"> <BR>  数据缓冲实验 5 <BR>  <IMG src="http://fineboy.cnblogs.com/Images/OutliningIndicators/None.gif"> <BR>  
  6
  
  
  7
  
  
  8
  
  

  9
  
  

  10
  
  

XML文件缓存测试


  11
  
  
12
<  12
  
  Width="600"
  13
  
  BorderColor="black"
  14
  
  ShowFooter="false" 15
  
  CellPadding=3 16
  
  CellSpacing="0"
  17
  
  Font-Name="Verdana"
  18
  
  Font-Size="8pt"
  19
  
  />
  20
  
  

  21
  
  

添加一个客户信息


  22
  
  















































  23      
  24      
姓 名:
  25      
  26      
  27         28      
  29      
身份证号:
  30      
  31      

  32
  
  Display="static" ErrorMessage="*" runat=server />
  33         34      
  35      
信用卡号:
  36      
  37      

  38
  
  Display="static" ErrorMessage="*" runat=server />
  39         40      
  41
  
  


  42
  
  
  43
  
  
  44
  
  


  45
  
  
  46
  
  
  47
  
  


  48
  
  
  49
  
  
  1
  
  
  
  Sub LoadData1()sub LoadData1 2
  
  '当缓存对象DataCache5有效时,从缓存中读出客户信息;无效时,从文件读出信息
  3
  
  dim dv1 as DataView 4
  
  dv1=Cache("DataCache5") 5
  
  if dv1 = Nothing
  6
  
  dim ds as DataSet 7
  
  dim fs as FileStream 8
  
  dim sr as StreamReader 9
  
  10
  
  ds=New DataSet11
  
  fs=New FileStream(Server.MapPath("custom1.xml"),FileMode.Open,FileAccess.Read)12
  
  sr=New StreamReader(fs)13
  
  ds.ReadXml(sr)14
  
  fs.Close()15
  
  dv1=new DataView(ds.Tables(0))16
  
  Cache.Insert("DataCache5",dv1,New cachedependency(Server.MapPath("custom1.xml")))17
  
  lblMsg.text="数据从文件中读出
  
  "
  18
  
  Else
  19
  
  lblmsg.text="数据从缓存中读出
  
  "
  20
  
  end if
  21
  
  '绑定到DataGrid1对象
  22
  
  DataGrid1.datasource = dv123
  
  DataGrid1.databind()24
  
  end sub
  25
  
  
  
  Sub Page_Load()sub Page_Load(s as object,e as eventargs)26
  
  '加载页面时,从文件中读出客户信息
  27
  
  if Not IsPostBack28
  
  LoadData1()29
  
  end if
  30
  
  end sub
  31
  
  
  
  Sub AddBtn_Click()sub AddBtn_Click(s as object,e as eventargs)32
  
  '增加一个客户信息到文件中
  33
  
  dim FS as FileStream34
  
  dim Reader as StreamReader35
  
  dim DS as DataSet36
  
  dim dr1 as DataRow37
  
  dim tw1 as TextWriter38
  
  if Not Page.IsValid39
  
  lblMsg.text="还有域未曾填充
  
  "
  40
  
  else
  41
  
  DS=New DataSet()42
  
  FS=New FileStream(Server.mappath("custom1.xml"),FileMode.Open,FileAccess.Read,FileShare.ReadWrite)43
  
  Reader=New StreamReader(FS)44
  
  DS.readxml(Reader)45
  
  FS.Close()46
  
  dr1=DS.tables(0).newrow()47
  
  dr1("CustName")=txtName.text48
  
  dr1("CustIdno")=txtIdno.text49
  
  dr1("CustCard")=txtCard.text50
  
  DS.tables(0).rows.add(dr1)51
  
  52
  
  FS=New FileStream(Server.MapPath("custom1.xml"),FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite)53
  
  tw1=New StreamWriter(FS)54
  
  tw1=textwriter.synchronized(tw1)55
  
  DS.writexml(tw1)56
  
  tw1.close()57
  
  LoadData1()58
  
  end if
  59
  
  end sub
  60
  
  
  
  Sub RefreshBtn_Click()sub RefreshBtn_Click(s as object,e as eventargs)61
  
  LoadData1()62
  
  end sub
  63
  
  
  (2)初始运行效果
  初始时,应用空间中无“DataCache”缓存对象,故文件从custom1.xml中读出客户信息,开始时为空,只显示了字段名。
  
  
  (3)当添加一个用户信息后,文件custom1.xml发生改变,导致“DataCache5”对象无效,
  LoadData1过程依然从文件custom1.xml中读取信息,并更新DataCache5对象。
  
  
  (4)由于custom1.xml文件未曾发生改变,所以当按下“刷新“按钮后,信息却是从缓存对象DataCach5中读出来。
  
  
  页面数据缓存技术可能比页面输出缓存技术使用得更普遍一些。
  posted on 2005-08-07 17:30 振河阅读(458) 评论(0) 编辑 收藏所属分类: ASP.NET

本文转自
http://fineboy.cnblogs.com/articles/209428.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值