Exemple #1
0
        /// <inheritdoc />
        public bool TryGetValue(TKey key, out TValue value)
        {
            if (key == null)
            {
                throw new ArgumentNullException("key");
            }
            MemoryCacheBucket <TKey, TValue> bucket = _buckets[_bucketMapper(key)];

            return(bucket.TryGetValue(key, out value));
        }
Exemple #2
0
        /// <inheritdoc />
        public void AddOrUpdate(TKey key, TValue value)
        {
            if (key == null)
            {
                throw new ArgumentNullException("key");
            }
            MemoryCacheBucket <TKey, TValue> bucket = _buckets[_bucketMapper(key)];

            bucket.AddOrUpdate(key, value);
        }
Exemple #3
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="bucketCount">number of cache buckets</param>
        /// <param name="bucketMapper">bucket mapper</param>
        /// <param name="comparer">comparer to ensure the equality of 2 values</param>
        /// <param name="cleanupSettings">Cache eviction settings</param>
        public MemoryCache(int bucketCount, KeyMappingDelegate <TKey> bucketMapper, IEqualityComparer <TValue> comparer, CleanupSettings cleanupSettings)
        {
            _bucketCount  = bucketCount;
            _buckets      = new MemoryCacheBucket <TKey, TValue> [_bucketCount];
            _bucketMapper = bucketMapper;
            _comparer     = comparer;

            for (int i = 0; i < _bucketCount; i++)
            {
                _buckets[i] = new MemoryCacheBucket <TKey, TValue>(_comparer);
            }
            _cleanupSettings = cleanupSettings;
            _cleanupTimer    = new Timer(new TimerCallback(CacheCleanup), this, _cleanupSettings.CleanupInterval, _cleanupSettings.CleanupInterval);
        }