【发布时间】:2013-06-03 02:01:17
【问题描述】:
我对 CacheItemPolicy 上的 AbsoluteExpiration 属性感到困惑。
The MSDN documentation for it 表示“缓存条目被驱逐之前必须经过的时间段。”它使用 System.DateTimeOffset 来定义“时间段”。
但是,如果您查看 DateTimeOffset's MSDN documentation,它会说它“代表一个时间点……相对于协调世界时 (UTC)。”也参考这个StackOverflow thread。
你看到问题了吗? AbsoluteExpiration 需要一个“时间段”(如 5 秒或 2 小时),但它需要一个表示“时间点”的对象(如 2012 年 12 月 21 日,美国东部标准时间 06:14:00)。
在下面的代码中,我为所有项目定义了一个策略。我希望每个项目在添加后都过期cacheExpiryInSeconds 秒。有人可以验证我这样做的方式是否正确吗?
public class MyCache : IRoutingInfoCache
{
MemoryCache _routingInfoCache;
CacheItemPolicy _cachePolicy;
public MyCache(int cacheExpiryInSeconds)
{
_routingInfoCache = new MemoryCache("myCache");
_cachePolicy = new CacheItemPolicy() {
AbsoluteExpiration =
new DateTimeOffset(
DateTime.UtcNow.AddSeconds(cacheExpiryInSeconds))
};
}
public void Put(string key, object cacheItem)
{
// based on how I constructed _cachePolicy, will this item expire
// in cacheExpiryInSeconds seconds?
_routingInfoCache.Add(new CacheItem(key, cacheItem), _cachePolicy);
}
}
【问题讨论】: