实现数据缓存(类似Cache功能)

此博客展示了使用C#实现的MyCache类,用于缓存数据。该类利用Hashtable存储数据,通过线程自动清除超时未访问的数据,同时提供了获取、设置和移除数据的方法,还支持回调函数,可对缓存数据进行有效管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Threading;
using System.Collections;

namespace MyCache
{
 /// <summary>
 /// 实现缓存
 /// </summary>
 public sealed class MyCache
 {
  private static Hashtable Hash = Hashtable.Synchronized(new Hashtable());
  private static Thread thread;
  static MyCache()
  {
   thread = new Thread(new ThreadStart(AutoRemoveData));
   thread.Start();
  }
  ~MyCache()
  {
   Hash.Clear();
   Hash = null;
   thread.Abort();
   thread = null;
  }


  private static void AutoRemoveData()
  {
   while (true)
   {
    foreach(object Obj in new ArrayList(Hash.Keys))
    {
     //清除超时没有访问量的 讨论版所占内存
     
     if (((Data)Hash[Obj]).time< System.DateTime.Now)
     {
      try
      {
       Remove(Obj.ToString());
      }
      catch{}
     }
    }
    Thread.Sleep(1000);
   }
  }

  public static object Get(string Key)
  {
   if (Hash[Key] == null)
    return null;
   else
    return ((Data)Hash[Key]).Base;
  }


  //超过几分钟不访问:在每次访问的时候,更改到期时间(未加代码)
  public static void Set(object BaseData, string Key, int CacheTime)
  {
   Set(BaseData, Key, DateTime.Now.AddMinutes(CacheTime), null);
  }

  public static void Set(object BaseData, string Key, int CacheTime, string CallBack)
  {
   Set(BaseData, Key, DateTime.Now.AddMinutes(CacheTime), CallBack);
  }

  public static void Set(object BaseData, string Key, DateTime RemoveTime)
  {
   Set(BaseData, Key, RemoveTime, null);
  }

  public static void Set(object BaseData, string Key, DateTime RemoveTime, string CallBack)
  {
   if (Hash[Key] != null)
    Remove(Key);
   Data d = new Data(BaseData,RemoveTime,CallBack);
   Hash.Add(Key,d);
  }


  private static void Remove(string Key)
  {
   if (Hash[Key] == null)
    return;
   Data d = (Data)Hash[Key];
   if (d.CallBack != null & d.CallBack !="" & d.Base.GetType().GetMethod(d.CallBack) != null)
   {
    try
    {
     d.Base.GetType().InvokeMember(d.CallBack,System.Reflection.BindingFlags.InvokeMethod, null,d.Base,null);   
    }
    catch
    {}
   }
   Hash.Remove(Key);
  }

  private sealed class Data
  {
   public DateTime time;
   public object Base;
   public string CallBack="";
   public bool IsLast = false;

   public Data(object data, DateTime RemoveTime, string CallBack)
   {
    this.Base = data;
    this.time = RemoveTime;
    this.CallBack = CallBack;
   }
  }
 } 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值