| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // This file implements the classes ExpiresEntryRef and CacheExpires missing from .NET reference source
- using System.Threading;
- namespace System.Runtime.Caching
- {
- class ExpiresEntryRef
- {
- public static ExpiresEntryRef INVALID = new ExpiresEntryRef ();
- public bool IsInvalid {
- get { return this == INVALID; }
- }
- }
- class CacheExpiresHelper : ICacheEntryHelper
- {
- public int Compare(MemoryCacheEntry entry1, MemoryCacheEntry entry2)
- {
- return DateTime.Compare (entry1.UtcAbsExp , entry2.UtcAbsExp);
- }
- public DateTime GetDateTime (MemoryCacheEntry entry)
- {
- return entry.UtcAbsExp;
- }
- }
- class CacheExpires : CacheEntryCollection
- {
- public static TimeSpan MIN_UPDATE_DELTA = new TimeSpan (0, 0, 1);
- public static TimeSpan EXPIRATIONS_INTERVAL = new TimeSpan (0, 0, 20);
- public static CacheExpiresHelper helper = new CacheExpiresHelper ();
- Timer timer;
- public CacheExpires (MemoryCacheStore store)
- : base (store, helper)
- {
- }
- public new void Add (MemoryCacheEntry entry)
- {
- entry.ExpiresEntryRef = new ExpiresEntryRef ();
- base.Add (entry);
- }
- public new void Remove (MemoryCacheEntry entry)
- {
- base.Remove (entry);
- entry.ExpiresEntryRef = ExpiresEntryRef.INVALID;
- }
- public void UtcUpdate (MemoryCacheEntry entry, DateTime utcAbsExp)
- {
- base.Remove (entry);
- entry.UtcAbsExp = utcAbsExp;
- base.Add (entry);
- }
- public void EnableExpirationTimer (bool enable)
- {
- if (enable) {
- if (timer != null)
- return;
- var period = (int) EXPIRATIONS_INTERVAL.TotalMilliseconds;
- timer = new Timer ((o) => FlushExpiredItems (true), null, period, period);
- } else {
- timer.Dispose ();
- timer = null;
- }
- }
- public int FlushExpiredItems (bool blockInsert)
- {
- return base.FlushItems (DateTime.UtcNow, CacheEntryRemovedReason.Expired, blockInsert);
- }
- }
- }
|