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语句。 或者我对缓存的理解不合适,请帮助我解决这个问题。
答案 0 :(得分:0)
您的缓存是否可以保存到任何类型的永久存储并从中加载?如果不是,则缓存仅存在于进程内存中,并且在进程存在后不会保留。基本上,如果要在程序运行之间使用数据,则需要持久保存到文件,数据库等...