ASP.NET Cache 方案

本文介绍了ASP.NET应用程序中的缓存机制,包括应用、会话和缓存三种资料暂存方式。详细阐述了如何通过设置缓存过期条件提高网站执行效率,并提供了一个具体的缓存实现案例。

ASP.NET 网站应用程序是无状态的,客户端每执行一次 PostBack 动作,所有的对象都需要重新建立;当然这样的执行模式相当没有效率,所以在 ASP.NET 应用程序中有 Application、Session、Cache 这三类资料暂存区。Application 的生命周期与应用程序相同,Session 的生命周期与个别使用者相同,而 Cache 的生命周期则由程序设计师自订,Cache 相对于 Application 及 Session 来说显示更有弹性。
选择合适的 Cache 方案能有效提升网站的执行效能,设定 Cache 过期的条件可分为下列三种。
1.绝对时间:插入对象过期并从快取移除的时间。
2.浮动时间:上次存取插入对象的时间与该对象到期的时间之间隔。如果这个数值等于二十分钟,那么对象将会在最后存取的二十分钟后过期并从快取中移除。
3.档案相依:项目的档案或快取索引键相依性。例如,假设您根据 XML 档案中的数据建立 DataSet 对象,您可以将 DataSet 加入含有 CacheDependency 对象的快取,该对象使 DataSet 相依于此 XML 档案。如果 XML 档案变更,则会从快取中移除 DataSet。
笔者常使用 Cache 来暂存经常存取的设定数据,一般作法是根据 XML 档案建立「设定类别」,这个类别再放入 Cache,并设定快取过期条件为「浮动时间+XML 档案相依」。这样的快取方案有二个优点。
1.该对象存取的频率愈多,则会优先置于 Cache,不易从 Cache 被移除。
2.当设定的 XML 档案内容变更时,Cache 则会被移除,以保持最新资料。
 
这个快取方案的算法如下
Step1:要求对象。
Step2:检查 Cache 中是否有该对象。
Step3:若 Cache 中有该对象,则取得对象跳离程序。反之则执行 Step4。
Step4:由 XML 档案建立对象,并存入 Cache,并传回该物件。
 
假设 TMySetting 对象要使用上述的快取方案,程序代码实作如下。程序代码中处理反序列化的 TBSerializerUtil.XmlFileToObject 方法 ,请参阅「物件序列化函式库」一文。

 

     '''   <summary>
    
'''  依键值取得 TMySetting 对象。
    
'''   </summary>
    
'''   <param name="Key"> 键值。 </param>
     Public   Function  GetMySetting( ByVal  Key  As   String As  TMySeting
        
Dim  sCacheKey  As   String
        
Dim  oCache  As  System.Web.Caching.Cache
        
Dim  oMySeting  As  TMySeting
        
Dim  sFileName  As   String

        
' 快取键值为「型别名称.键值」
        sCacheKey  =   String .Format( " {0}.{1} " GetType (TMySeting).Name, Key)

        
' ASP.NET 快取物件
        oCache  =  System.Web.HttpContext.Current.Cache

        
If  oCache(sCacheKey)  IsNot   Nothing   Then
            
' 直接由 Cache 取得该对象
            oMySeting  =   CType (oCache(sCacheKey), TMySeting)
        
Else
            
' 由 XML 档案建立对象
            sFileName  =   " 对象对应的文件名称 "
            oMySeting 
=   CType (TBSerializerUtil.XmlFileToObject(sFileName,  GetType (TMySeting)), TMySeting)

            
' 将对象存入 Cache,并设定快取移除时机
             ' 1.档案相依
             ' 2.浮动时间为 5 分钟
            oCache.Insert(sCacheKey, oMySeting, _
                          
New  System.Web.Caching.CacheDependency(sFileName), _
                          System.Web.Caching.Cache.NoAbsoluteExpiration, 
New  TimeSpan( 0 5 0 ))
        
End   If
        
Return  oMySeting
    
End Function

 

后记:
在 EnterpriseLibrary 中也有处理快取的 CacheManager 对象,它类似 ASP.NET 的 Cache 物件。若是撰写三层式架构,也可以使用 EnterpriseLibrary 的 CacheManager 来取代 ASP.NET Cache,往后有时间再来介绍 EnterpriseLibrary 的 CacheManager 对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值