缓存不起作用

时间:2014-04-06 01:49:35

标签: c# caching

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Caching;

 namespace Caching_IApiOutputCache_MemeoryCacheDefault
                                                                                                      {
    class Customer
    {
    public string Name { get; set; }
    public int Id { get; set; }
    }

class Cache
{
    MemoryCacheDefault mc = new MemoryCacheDefault();
    IEnumerable<Customer> cust = new List<Customer> { 
          new Customer { Name = "john", Id = 1 },
          new Customer { Name = "mark", Id = 2 } };
    public IEnumerable<Customer> GetCachedItems()
    {
        return (IEnumerable<Customer>)mc.Get("section");
    }

    public bool CacheIsEmptyOrFull()
    {
        //var mc = MemoryCache.Default;
        if (!mc.Contains("section"))
        {
            var expiration = DateTimeOffset.MaxValue;
            var Customers = cust;
            mc.Add("section", Customers, expiration);
            return false;
        }

        return true;
    }
}

class Program
{
    static void Main(string[] args)
    {
        //Cache c = Cache.Instance;
        Cache c = new Cache();
        bool b = c.CacheIsEmptyOrFull();
        Console.WriteLine(b);
        IEnumerable<Customer> customer = c.GetCachedItems();
        foreach (var v in customer)
        {
            Console.WriteLine(v.Name + "'s" + " id is " + v.Id);

        }
    }
}
}

这是我的代码......它工作正常没问题。但是让我感到困惑的是,当我第一次运行此代码时,缓存发生在方法CacheIsEmptyOrFull()中并且它返回false然后我得到了从缓存本身收集并将其放入Main()方法中的客户对象中。但是当我第二次运行代码时,为什么CacheIsEmptyOrFull()没有返回true,因为缓存已经有一个集合(假设我已经运行了代码并填充了缓存)所以CacheIsEmptyOrFull()必须返回一个true和如果这个方法中的语句不应该第二次执行(假设缓存中已经存在某些东西)。 但这并没有发生,每次运行代码时,它都会从CacheIsEmptyOrFull()方法中给出错误。

为什么会这样?如果正在进行缓存,那么为什么每次运行代码时都会执行if语句。 或者我对缓存的理解不合适,请帮助我解决这个问题。

1 个答案:

答案 0 :(得分:0)

您的缓存是否可以保存到任何类型的永久存储并从中加载?如果不是,则缓存仅存在于进程内存中,并且在进程存在后不会保留。基本上,如果要在程序运行之间使用数据,则需要持久保存到文件,数据库等...