| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- // This file implements the classes UsageEntryRef and CacheUsage missing from .NET reference source
- namespace System.Runtime.Caching {
- class UsageEntryRef {
- public static UsageEntryRef INVALID = new UsageEntryRef ();
- public bool IsInvalid {
- get { return this == INVALID; }
- }
- // This is used to compare MemoryCacheEntry that have the same UtcLastUpdateUsage.
- public int DateTimeIndex {
- get; set;
- }
- }
- class CacheUsageHelper : ICacheEntryHelper
- {
- public int Compare(MemoryCacheEntry entry1, MemoryCacheEntry entry2)
- {
- var ret = DateTime.Compare (entry1.UtcLastUpdateUsage , entry2.UtcLastUpdateUsage);
- if (ret == 0)
- return entry1.UsageEntryRef.DateTimeIndex - entry2.UsageEntryRef.DateTimeIndex;
- return ret;
- }
- public DateTime GetDateTime (MemoryCacheEntry entry)
- {
- return entry.UtcLastUpdateUsage;
- }
- }
- class CacheUsage : CacheEntryCollection {
- public static TimeSpan CORRELATED_REQUEST_TIMEOUT = new TimeSpan (0, 0, 10);
- public static TimeSpan MIN_LIFETIME_FOR_USAGE = new TimeSpan (0, 0, 10);
- public static CacheUsageHelper helper = new CacheUsageHelper ();
- public DateTime prevDateTime;
- public int dateTimeIndex;
- public CacheUsage (MemoryCacheStore store)
- : base (store, helper)
- {
- }
- public new void Add (MemoryCacheEntry entry)
- {
- var now = DateTime.UtcNow;
- if (now == prevDateTime)
- dateTimeIndex++;
- else
- dateTimeIndex = 0;
- prevDateTime = now;
- entry.UtcLastUpdateUsage = now;
- entry.UsageEntryRef = new UsageEntryRef ();
- entry.UsageEntryRef.DateTimeIndex = dateTimeIndex;
- base.Add (entry);
- }
- public new void Remove (MemoryCacheEntry entry)
- {
- base.Remove (entry);
- entry.UsageEntryRef = UsageEntryRef.INVALID;
- }
- public void Update (MemoryCacheEntry entry)
- {
- base.Remove (entry);
- entry.UtcLastUpdateUsage = DateTime.UtcNow;
- base.Add (entry);
- }
- public int FlushUnderUsedItems (int count)
- {
- return base.FlushItems (DateTime.MaxValue, CacheEntryRemovedReason.Evicted, true, count);
- }
- }
- }
|