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

 

新一篇: 声明-------

<script type="text/javascript">function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script> 1 基本概念         ASP.NET提供了一个相当出色的缓存引擎机制,它允许页面保存和索引HTTP请求所要求的各种各样的对象。ASP.NET的缓存对各个应用来说是私有的,是存储各种对象的存储器。缓存的生存周期取决于应用的生存周期,也就是说,当应用重新启动时,缓存实际上也已重建。         缓存提供了一个简单的字典接口,以便于开发者能够轻而易举放置对象到缓存中,并在以后使用。最简单的情况下,放置一个对象到缓存中,就如同对字典增加一个条目。 例如:
1 Cache(“myKey”) = MyValue 2 即是把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 < html >  2 < head >  3 < title >  4 数据缓冲实验  5 </ title >  6 </ head >  7 < body >  8 < center >  9 < form  runat =server > 10 < h2 > XML文件缓存测试 </ h2 > 11 < ASP:DataGrid  id ="DataGrid1"  runat ="server" 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 < hr > 21 < h3 > 添加一个客户信息 </ h3 > 22 < table > 23 < tr > 24 < td > 姓    名: </ td > 25 < td >< ASP:textbox  id =txtName  runat =server  /></ td > 26 < td >< ASP:RequiredFieldValidator  ControlToValidate ="txtName"  Display ="static"  ErrorMessage ="*"  runat =server  />   </ td > 27 </ tr > 28 < tr > 29 < td > 身份证号: </ td > 30 < td >< ASP:textbox  id =txtIdno  runat =server  /></ td > 31 < td >< ASP:RequiredFieldValidator  ControlToValidate ="txtIdno" 32 Display ="static"  ErrorMessage ="*"  runat =server  />   </ td > 33 </ tr > 34 < tr > 35 < td > 信用卡号: </ td > 36 < td >< ASP:textbox  id =txtCard  runat =server  /></ td > 37 < td >< ASP:RequiredFieldValidator  ControlToValidate ="txtCard" 38 Display ="static"  ErrorMessage ="*"  runat =server  />   </ td > 39 </ tr > 40 </ table > 41 < p > 42 < asp:button  text ="增加"  onclick ="AddBtn_Click"  runat =server  /> 43 < asp:button  text ="刷新"  onclick ="RefreshBtn_Click"  runat =server  /> 44 < p >< p >< p > 45 < asp:label  id =lblMsg  runat =server  /> 46 </ form > 47 </ center > 48 </ body > 49 </ html >
 1 sub LoadData1  2'当缓存对象DataCache5有效时,从缓存中读出客户信息;无效时,从文件读出信息  3dim 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 DataSet 11    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 = dv1 23    DataGrid1.databind() 24end sub 25 sub Page_Load(s as object,e as eventargs) 26'加载页面时,从文件中读出客户信息 27    if Not IsPostBack 28    LoadData1() 29    end if 30end sub 31 sub AddBtn_Click(s as object,e as eventargs) 32'增加一个客户信息到文件中 33dim FS as FileStream 34dim Reader as StreamReader 35dim DS as DataSet 36dim dr1 as DataRow 37dim tw1 as TextWriter 38    if Not Page.IsValid 39    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.text 48    dr1("CustIdno")=txtIdno.text 49    dr1("CustCard")=txtCard.text 50    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 59end sub 60 sub RefreshBtn_Click(s as object,e as eventargs) 61    LoadData1() 62end sub 63

(2)初始运行效果          初始时,应用空间中无“DataCache”缓存对象,故文件从custom1.xml中读出客户信息,开始时为空,只显示了字段名。 (3)当添加一个用户信息后,文件custom1.xml发生改变,导致“DataCache5”对象无效,

LoadData1过程依然从文件custom1.xml中读取信息,并更新DataCache5对象。 (4)由于custom1.xml文件未曾发生改变,所以当按下“刷新“按钮后,信息却是从缓存对象DataCach5中读出来。 页面数据缓存技术可能比页面输出缓存技术使用得更普遍一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值