vs2010--缓存类

//.net 4.0  重写缓存类(拓展)
using System.Web.Caching;

public class InMemoryOutputCacheProvider : OutputCacheProvider
{  
    #region Members   
    private Dictionary<string, InMemoryOutputCacheItem> _cache = new Dictionary<string, InMemoryOutputCacheItem>();  
    private readonly static object _syncLock = new object();  
    #endregion   

    #region Methods  
    public override object Add(string key, object entry, DateTime utcExpiry) 
    {   
        Set(key, entry, utcExpiry); 
        return entry;
    }  

    public override object Get(string key) 
    {   
        InMemoryOutputCacheItem item = null;   
        if (_cache.TryGetValue(key, out item))   
        {    
            if (item.UtcExpiry < DateTime.UtcNow)   
            {     
                Remove(key);    
                return null;      
            }     
            return item.Value;   
        }    
        return null; 
    } 

    public override void Remove(string key) 
    {   
        InMemoryOutputCacheItem item = null;  
        if (_cache.TryGetValue(key, out item))  
        {     
            _cache.Remove(key); 
        } 
    }  

    public override void Set(string key, object entry, DateTime utcExpiry) 
    {  
        var item = new InMemoryOutputCacheItem(entry, utcExpiry);   
        lock (_syncLock) 
        {  
            if (_cache.ContainsKey(key))  
            {      
                _cache[key] = item;  
            }    
            else    
            {    
                _cache.Add(key, item); 
            }   
        } 
    }  

    #endregion
}



public class InMemoryOutputCacheItem
{ 
    #region Members  
 
    public DateTime UtcExpiry { get; set; }  
    public object Value { get; set; }   

    #endregion 
  
    #region Ctor   

    public InMemoryOutputCacheItem(object value, DateTime utcExpiry) 
    {   
        Value = value;   
        UtcExpiry = utcExpiry; 
    }  

    #endregion
}


//配置

        <caching>
            <outputCache defaultProvider="InMemory">
                <providers>
                    <add name="InMemory" type="InMemoryOutputCacheProvider"/>
                </providers>
            </outputCache>
        </caching>

//页面

<%@ OutputCache Duration="15" VaryByParam="*" %>

 

posted @ 2010-10-06 23:56  曾祥展  阅读(1569)  评论(0编辑  收藏  举报