我目前正在缓存方法调用的结果。
缓存代码遵循标准模式:它使用缓存中的项目(如果存在),否则它会计算结果,在返回之前将其缓存以供将来调用。
我想屏蔽客户端代码以防止缓存未命中(例如,当项目已过期时)。
我正在考虑生成一个等待缓存对象生命周期的线程,然后运行一个提供的函数,以便在现有项目到期时(或之前)重新填充缓存。
任何人都可以分享与此相关的经验吗?这听起来像是一种明智的做法吗?
我正在使用.NET 4.0。
答案 0 :(得分:4)
答案 1 :(得分:4)
.NET Framework 4.0的新增功能是MemoryCache Class
来自文档的引用:
MemoryCache类与 ASP.NET Cache类。该 MemoryCache类有很多属性 以及访问缓存的方法 如果你熟悉的话 使用了ASP.NET Cache类
如果不存在,您可以使用AddOrGetExisting方法来获取或创建CacheItem。
答案 2 :(得分:2)
这是一个永不过期的缓存:
var cache = new ConcurrentDictionary<TKey, TValue>();
var value = cache.GetOrAdd(someKey, key => MyMethod(key));
这有帮助吗?
这是一个永不过期的缓存,并在一定生命周期后刷新该值:
var cache = new ConcurrentDictionary<TKey, Tuple<TValue, DateTime>>();
var value = cache.AddOrUpdate(someKey,
key => Tuple.Create(MyMethod(key), DateTime.Now),
(key, value) => (value.Item2 + lifetime < DateTime.Now)
? Tuple.Create(MyMethod(key), DateTime.Now)
: value)
.Item1;
这有帮助吗?
答案 3 :(得分:0)
对象过期似乎没有任何意义,只是立即重新创建它。关闭过期; dtb显示了如何。