예제 #1
0
 public ActionCache(
     Func <TKey, TValue> valueFetcher,
     Func <TValue, uint> sizeEstimator   = null,
     CacheReapPolicy reapStrategy        = CacheReapPolicy.None,
     ExpirationPolicy expirationStrategy = ExpirationPolicy.None,
     uint maxCapacity                     = int.MaxValue,
     TimeSpan?expirationDuration          = null,
     NullValuePolicy nullValuePolicy      = NullValuePolicy.CacheNormally,
     IEqualityComparer <TKey> keyComparer = null)
     : base(reapStrategy, expirationStrategy, maxCapacity, expirationDuration, nullValuePolicy, keyComparer)
 {
     _fetchFunc        = valueFetcher;
     _estimateSizeFunc = sizeEstimator;
 }
예제 #2
0
 protected CacheBase(
     CacheReapPolicy reapStrategy        = CacheReapPolicy.None,
     ExpirationPolicy expirationStrategy = ExpirationPolicy.None,
     uint maxCapacity                     = int.MaxValue,
     TimeSpan?expirationDuration          = null,
     NullValuePolicy nullValuePolicy      = NullValuePolicy.CacheNormally,
     IEqualityComparer <TKey> keyComparer = null
     )
 {
     if (!expirationDuration.HasValue)
     {
         expirationDuration = TimeSpan.MaxValue;
     }
     NullValuePolicy    = nullValuePolicy;
     InternalStorage    = keyComparer == null ? new Dictionary <TKey, CachedItem <TValue> >() : new Dictionary <TKey, CachedItem <TValue> >(keyComparer);
     CurrentSize        = 0;
     ReapPolicy         = reapStrategy;
     ExpirationPolicy   = expirationStrategy;
     MaxCapacity        = maxCapacity;
     ExpirationDuration = expirationDuration.Value;
     _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
 }