CacheItemPolicyのAbsoluteExpirationプロパティを混同しています。.NETでCacheItemPolicy経由でキャッシュされたアイテムを期限切れにするMemoryCache
The MSDN documentation for itは、「キャッシュエントリが削除されるまでに経過しなければならない期間」と述べています。 System.DateTimeOffsetを使用して「期間」を定義します。
しかし、DateTimeOffset's MSDN documentationを見ると、「協定世界時(UTC)に関連する時点を表しています」と表示されます。このStackOverflow threadも参照してください。
問題が表示されますか? AbsoluteExpirationでは、「時間帯」(5秒または2時間など)が必要ですが、「時刻」を表すオブジェクトが必要です(2012年12月21日、06:14:00 ESTなど)。
以下のコードでは、すべてのアイテムに対して1つのポリシーを定義しています。私は、すべてのアイテムが期限切れになるようにしたいのですが、追加した後には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);
}
}
どこに30秒かかりましたか? –
間違いでした。編集されました。 – Haney
しかし、上記のコードを使用してキャッシュポリシーを作成すると、アイテムを追加するたびに期待どおりに機能するはずです。 –