6992685b86
Former-commit-id: 0a113cb3a6feb7873f632839b1307cc6033cd595
81 lines
1.8 KiB
C#
81 lines
1.8 KiB
C#
// 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);
|
|
}
|
|
}
|
|
} |