日期:2014-05-20  浏览次数:20576 次

【散300分】公布网站上的一个缓存类,希望大家多指教
一开始我的网站上没有用缓存,很明细速度非常慢。用过缓存之后速度明显好多了。

大家看看这几个方法,当初也是在网上学习之后的笔记,然后整理出来的一个类。

大家看看有什么不足,或需要改进的地方。 我的网站:我爱编码网

C# code
using System;
using System.Collections.Generic;
using System.Web;
using System.Configuration;
using System.Collections;

/// <summary>
///CacheHelper 的摘要说明
/// </summary>
public class CacheHelper
{
    #region 从配置文件中读取缓存时间
    //缓存时间
    private static string _CacheTime = string.Empty;
    public static string CacheTime
    {
        get
        {
            try
            {
                _CacheTime = ConfigurationManager.AppSettings["CacheTime"].ToString();
            }
            catch (Exception)
            {
                _CacheTime = "0";
            }
            return _CacheTime;
        }
        set { _CacheTime = value; }
    }
    #endregion

    public CacheHelper()
    {
        //
        //TODO: 在此处添加构造函数逻辑
        //
    }

    #region 插入Cache
    /// <summary> 
    /// 插入Cache 
    /// </summary> 
    /// <typeparam name="T"></typeparam> 
    /// <param name="o"></param> 
    /// <param name="key"></param> 
    public static void Add<T>(T o, string key)
    {
        HttpContext.Current.Cache.Insert(
            key,
            o,
            null,
            DateTime.Now.AddMinutes(Convert.ToDouble(CacheTime)),  // Cache的缓存时间,通常建议配置在Config文件中 
            System.Web.Caching.Cache.NoSlidingExpiration);
    }
    #endregion

    #region 删除指定的Cache
    /// <summary> 
    /// 删除指定的Cache 
    /// </summary> 
    /// <param name="key">Cache的key</param> 
    public static void Clear(string key)
    {
        HttpContext.Current.Cache.Remove(key);
    }
    #endregion

    #region 判断Cache是否存在
    /// <summary> 
    /// 判断Cache是否存在 
    /// </summary> 
    /// <param name="key"></param> 
    /// <returns></returns> 
    public static bool Exists(string key)
    {
        return HttpContext.Current.Cache[key] != null;
    }
    #endregion

    #region 取得Cache值,带类型 T
    /// <summary> 
    /// 取得Cache值,带类型 T 
    /// </summary> 
    /// <typeparam name="T"></typeparam> 
    /// <param name="key"></param> 
    /// <param name="value"></param> 
    /// <returns></returns> 
    public static bool Get<T>(string key, out T value)
    {
        try
        {
            if (!Exists(key))
            {
                value = default(T); // 
                return false;
            }

            value = (T)HttpContext.Current.Cache[key];
        }
        catch
        {
            value = default(T);
            return false;
        }

        return true;
    }
    #endregion

    #region 清除所有缓存
    /// <summary>
    /// 有时可能需要立即更新,这里就必须手工清除一下Cache 
    ///Cache类有一个Remove方法,但该方法需要提供一个CacheKey,但整个网站的CacheKey我们是无法得知的 
    ///只能经过遍历 
    /// </summary>
    public static void RemoveAllCache()
    {

        System.Web.Caching.Cache _cache = HttpRuntime.Cache;
        IDictionaryEnumerator CacheEnum = _cache.GetEnumerator();
        ArrayList al = new ArrayList();
        while (CacheEnum.MoveNext())
        {
            al.Add(CacheEnum.Key);
        }

        foreach (string key in al)
        {
            _cache.Remove(key);
        }
    }
    #endregion

    #region 显示所有缓存

    //显示所有缓存 
    public static string show()
    {
        string str = "";
        IDictionaryEnumerator CacheEnum = HttpRuntime.Cache.GetEnumerator();

        while (CacheEnum.MoveNext())
        {
            str += "<br />缓存名<b>[" + CacheEnum.Key + "]</b><br />";
        }
        return "当前网站总缓存数:" + HttpRuntime.Cache.Count + "<br />" + str;
    }
    #endregion
}