我的应用程序中有一个数据缓存,它保存查询结果,并在每个“对时”绝对到期时到期,即(08:00,10:00,12:00)。
所以:
public Dictionary<int, List<Int64>> GetCacheDNAOffers()
{
if (_cache["DnaOffersPairs"] == null)
{
Dictionary<int, string> dtDNA = GetCacheActiveOffers().AsEnumerable().Select(d => new { idOferta = Convert.ToInt32(d["nof_id"]), dna = d["nof_dna"].ToString() }).ToDictionary(t => t.idOferta, t => t.dna);
Dictionary<int, List<Int64>> lstDNA = new Dictionary<int, List<Int64>>();
foreach (var dna in dtDNA)
{
lstDNA[dna.Key] = CarregarDNA(dna.Value);
}
_cache.Insert("DnaOffersPairs", lstDNA, null, SetTimeCacheExpires(), TimeSpan.Zero);
}
return (Dictionary<int, List<Int64>>)_cache["DnaOffersPairs"];
}
设置到期时间的功能:
private DateTime SetTimeCacheExpires()
{
try
{
int hour = DateTime.Now.Hour;
int minutes = DateTime.Now.Minute;
int qtdhoursToExpire = 1;
NextHours = (hour + qtdhoursToExpire);
return new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, PairHour, minutes, 1);
}
catch (Exception ex)
{
throw ex;
}
}
检查“配对时间”的功能:
public int PairHour
{
get
{
if (NextHours % 2 == 0)
return NextHours;
else
return NextHours + 1;
}
}
如果apllication闲置一段时间,所有浏览器窗口关闭,有时会出现缓存过期的问题。
我是否需要在IIS上设置一个配置,以便将缓存永久保持活动状态,直到预先配置的缓存结束?或者是否在代码上正确设置了缓存配置?
答案 0 :(得分:3)
您应该检查这是否是由IIS池循环引起的。默认情况下,应用程序池在闲置20分钟后会循环使用。当循环发生时,存储在缓存中的所有数据都将过期(该过程只是关闭)。 http://technet.microsoft.com/pl-pl/library/cc753179(v=ws.10).aspx
答案 1 :(得分:2)
解决:
IIS上有一个默认配置,如果应用程序空闲20分钟,它会确定缓存的超时。
您必须将其删除。