我们的应用程序使用以下
将对象添加到缓存中int cacheTimeout = 5; // Default 5 minute timeout
if(ConfigurationManager.AppSettings["CacheTimeout"] != null)
{
cacheTimeout = Convert.ToInt32(ConfigurationManager.AppSettings["CacheTimeout"].ToString());
}
_cache.Insert(Key, CacheItem, null, DateTime.MaxValue, new TimeSpan(0, cacheTimeout, 0));
我们的经理关注可能的缓存问题,并想知道如果插入长度为0的对象会发生什么。
我认为该对象将立即被删除。是对还是错?
答案 0 :(得分:0)
答案是“错误”。
当绝对过期设置为NoAbsoluteExpiration且滑动过期设置为新TimeSpan(0,0,0)时插入缓存时,不会立即触发回调。我没有等到它什么时候开火,如果有的话 - 可能是20分钟,也许它永远不会。
所以将代码更改为:
int cacheTimeout = 5; // Default 5 minute timeout
if(ConfigurationManager.AppSettings["CacheTimeout"] != null)
{
cacheTimeout = Convert.ToInt32(ConfigurationManager.AppSettings["CacheTimeout"].ToString());
}
TimeSpan expiration = cacheTimeout > 0 ? new TimeSpan(0,cacheTimeout,0) : new TimeSpan(0,0,1);
_cache.Insert(Key, CacheItem, null, System.Web.Caching.Cache.NoAbsoluteExpiration, expiration, CacheItemPriority.Default, OnUpdateCallback);
这样,如果我们做有缓存问题,我们可以更新web.config以将缓存时间设置为0并且有1秒到期。