使用另一种方式实现会话功能

有的时候时候并不一定要使用SESSION,或不能使用WEB的SESSION,有的时候考虑自己来定义会话操作。可以用自己的代码来会话的操作。我也读了System.Web.SessionState的InProcess实现代码,如果按它的原理来的话。将会有很大的工作量。

那好吧,我们还有两个可选的方案,一个是 System.Web.Cache , 一个是 System.Runtime.Cache , MSDN也说了两个功能相似,Runtime的出现是为了可以脱离对于System.Web的依赖。 写个控制台类的程序那还是用System.Runtime吧。

 

下面是一个测试代码。

 

static void Main(string[] args)
      {

          MemoryCache mc = new MemoryCache("mycache");
          CacheItemPolicy policy = new CacheItemPolicy();

          policy.RemovedCallback = (x) =>
          {

              Console.WriteLine(x.CacheItem.Key + "removed");
          };

          policy.SlidingExpiration = new TimeSpan(0, 0, 3);

          var i = 0;
          while (true)
          {
              i++;

              mc.AddOrGetExisting(new CacheItem("mykey" + i, "value" + i), policy);

              Console.WriteLine(i + "=>" + mc.GetCount());

          }

         

      }

 

如果MemoryCache不满足要求的时候,可以考虑通过扩展 ObjectCache 加入自己想要的东西。(实际上MC就已经够用了)

 

 

上面的代码写的3秒过期,不会在整3秒的时候过期,大概5秒后才开始清理,这点看一下源代码就知道了。

 

另外,执行清理操作是一个占用CPU的操作,所以可以看到在运行的时候,如下

 

image

原文地址:https://www.cnblogs.com/zbw911/p/4256583.html