Ejemplo n.º 1
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="val">the object to be added to the cache</param>
        /// <param name="expiryHint">expiration hint for the object</param>
        /// <param name="evictionHint">eviction hint for the object</param>
        internal CacheEntry(object val, ExpirationHint expiryHint, EvictionHint evictionHint)
            : base(val)
        {
            _exh = expiryHint;
            _evh = evictionHint;
            
            _bitset.SetBit(FLATTENED);

            _creationTime = System.DateTime.Now;
            _lastModifiedTime = System.DateTime.Now;
        }
Ejemplo n.º 2
0
 public void Notify(object key, EvictionHint oldhint, EvictionHint newHint)
 {
     Sync.AcquireWriterLock(Timeout.Infinite);
     try
     {
         _evctPolicy.Notify(key, oldhint, newHint);
     }
     finally
     {
         Sync.ReleaseWriterLock();
     }
 }
Ejemplo n.º 3
0
        public static void WriteEvcHint(CompactWriter writer, EvictionHint evcHint)
        {
            if (evcHint == null)
            {
                writer.Write((short)EvictionHintType.NULL);
                return;
            }

            writer.Write((short)evcHint._hintType);
            ((ICompactSerializable)evcHint).Serialize(writer);
            return;
        }
 public void Notify(object key, EvictionHint oldhint, EvictionHint newHint)
 {
     Sync.AcquireWriterLock(Timeout.Infinite);
     try
     {
         _evctPolicy.Notify(key, oldhint, newHint);
     }
     finally
     {
         Sync.ReleaseWriterLock();
     }
 }
Ejemplo n.º 5
0
 public void Remove(object key, EvictionHint hint)
 {
     Sync.AcquireWriterLock(Timeout.Infinite);
     try
     {
         _evctPolicy.Remove(key, hint);
     }
     finally
     {
         Sync.ReleaseWriterLock();
     }
 }
Ejemplo n.º 6
0
 void IEvictionPolicy.Remove(object key, EvictionHint hint)
 {
     if (_index != null)
     {
         lock (_index.SyncRoot)
         {
             for (int i = 0; i < 5; i++)
             {
                 if (_index[i] != null)
                 {
                     if (_index[i].Contains(key))
                     {
                         _index[i].Remove(key);
                         if (_index[i].Count == 0)
                         {
                             _index[i] = null;
                         }
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 7
0
        //#endregion

        public static EvictionHint ReadEvcHint(CompactReader reader, PoolManager poolManager)
        {
            EvictionHintType expHint = EvictionHintType.Parent;

            expHint = (EvictionHintType)reader.ReadInt16();
            EvictionHint tmpObj = null;

            switch (expHint)
            {
            case EvictionHintType.NULL:
                return(null);

            case EvictionHintType.Parent:
                tmpObj = (EvictionHint)reader.ReadObject();
                return(tmpObj);

            case EvictionHintType.CounterHint:
                var ch = CounterHint.Create(poolManager);
                ((ICompactSerializable)ch).Deserialize(reader);
                return(ch);

            case EvictionHintType.PriorityEvictionHint:
                var peh = PriorityEvictionHint.Create(poolManager);
                ((ICompactSerializable)peh).Deserialize(reader);
                return(peh);

            case EvictionHintType.TimestampHint:
                var tsh = TimestampHint.Create(poolManager);
                ((ICompactSerializable)tsh).Deserialize(reader);
                return(tsh);

            default:
                break;
            }
            return(null);
        }
 public void Remove(object key, EvictionHint hint)
 {
     Sync.AcquireWriterLock(Timeout.Infinite);
     try
     {
         _evctPolicy.Remove(key, hint);
     }
     finally
     {
         Sync.ReleaseWriterLock();
     }
 }
 public EvictionHint CompatibleHint(EvictionHint eh)
 {
     return _evctPolicy.CompatibleHint(eh);
 }
Ejemplo n.º 10
0
 public void Insert(object key, object value, EvictionHint evictionHint)
 {
     Insert(key, value, null, evictionHint, new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation));
 }
Ejemplo n.º 11
0
 public EvictionHint CompatibleHint(EvictionHint eh)
 {
     return(_evctPolicy.CompatibleHint(eh));
 }
Ejemplo n.º 12
0
		/// <summary>
		/// Check if the provided eviction hint is compatible with the policy
		/// and return the compatible eviction hint
		/// </summary>
		/// <param name="eh">eviction hint.</param>
		/// <returns>a hint compatible to the eviction policy.</returns>
		public EvictionHint CompatibleHint(EvictionHint eh)
		{
			if (eh != null && eh is PriorityEvictionHint)
			{
				return eh;
			} 
			return new PriorityEvictionHint(_priority);
		}
Ejemplo n.º 13
0
        /// <summary>
        /// Insert array of CompactCacheEntry to cache, these may be serialized
        /// </summary>
        /// <param name="entries"></param>
        public IDictionary InsertEntries(object[] entries, OperationContext operationContext)
        {
            // check if cache is running.
            if (!IsRunning) return null;

            string[] keys = new string[entries.Length];
            object[] values = new object[entries.Length];

            CallbackEntry[] callbackEnteries = new CallbackEntry[entries.Length]; 
            ExpirationHint[] exp = new ExpirationHint[entries.Length];
            EvictionHint[] evc = new EvictionHint[entries.Length];
            BitSet[] flags = new BitSet[entries.Length];
            Hashtable[] queryInfo = new Hashtable[entries.Length];
            CallbackEntry cbEntry = null;

            for (int i = 0; i < entries.Length; i++)
            {
                CompactCacheEntry cce = (CompactCacheEntry)SerializationUtil.CompactDeserialize(entries[i], _context.SerializationContext);
                keys[i] = cce.Key as string;
                CacheEntry ce = MakeCacheEntry(cce);
                if (ce != null)
                {
                    if (ce.Value is CallbackEntry)
                        cbEntry = ce.Value as CallbackEntry;
                    else
                        cbEntry = null;

                    callbackEnteries[i] = cbEntry;

                    object value = ce.Value as CallbackEntry;
                    values[i] = value == null ? ce.Value : ((CallbackEntry)ce.Value).Value;

                    exp[i] = ce.ExpirationHint;
                    evc[i] = ce.EvictionHint;
                    queryInfo[i] = ce.QueryInfo;
                    flags[i] = ce.Flag;
                }
            }

            IDictionary items= Insert(keys, values, callbackEnteries, exp, evc, queryInfo, flags, operationContext);
           
            return items;
        }
Ejemplo n.º 14
0
 /// <summary>
 /// Overload of Insert operation. Uses additional EvictionHint and ExpirationHint parameters.
 /// </summary>
 internal void Insert(object key, object value, ExpirationHint expiryHint, EvictionHint evictionHint, OperationContext operationContext)
 {
     Insert(key, value, expiryHint,  evictionHint, null, operationContext);
 }
Ejemplo n.º 15
0
        void IEvictionPolicy.Notify(object key, EvictionHint oldhint, EvictionHint newHint)
        {
            //always use the new priority eviction hint.
            EvictionHint hint = newHint;

            if (hint != null)
            {
                CacheItemPriority hintPriority = ((PriorityEvictionHint)hint).Priority;

                if (hintPriority == CacheItemPriority.Default)
                {
                    hintPriority = this._priority;//set the default priority from the config.
                    ((PriorityEvictionHint)hint).Priority = this._priority;
                }

                if ((oldhint != null))
                {
                    CacheItemPriority oldPriority = ((PriorityEvictionHint)oldhint).Priority;
                    CacheItemPriority newPriority = ((PriorityEvictionHint)newHint).Priority;
                    if (oldPriority != newPriority)
                    {
                        IEvictionPolicy temp = this as IEvictionPolicy;
                        temp.Remove(key, oldhint);
                    }
                }

                lock (_index.SyncRoot)
                {
                    switch (hintPriority)
                    {
                    case CacheItemPriority.Low:
                        if (_index[0] == null)
                        {
                            _index[0] = new HashVector();
                        }
                        _index[0][key] = hint;
                        break;

                    case CacheItemPriority.BelowNormal:
                        if (_index[1] == null)
                        {
                            _index[1] = new HashVector();
                        }
                        _index[1][key] = hint;
                        break;

                    case CacheItemPriority.Normal:
                        if (_index[2] == null)
                        {
                            _index[2] = new HashVector();
                        }
                        _index[2][key] = hint;
                        break;

                    case CacheItemPriority.AboveNormal:
                        if (_index[3] == null)
                        {
                            _index[3] = new HashVector();
                        }
                        _index[3][key] = hint;
                        break;

                    case CacheItemPriority.High:
                        if (_index[4] == null)
                        {
                            _index[4] = new HashVector();
                        }
                        _index[4][key] = hint;
                        break;
                    }
                }
            }
        }
Ejemplo n.º 16
0
        public void Insert(object key, object value, ExpirationHint expiryHint, EvictionHint evictionHint, Hashtable queryInfo, BitSet flag, OperationContext operationContext)
        {
            if (key == null) throw new ArgumentNullException("key");
            if (value == null) throw new ArgumentNullException("value");

            if (!key.GetType().IsSerializable)
                throw new ArgumentException("key is not serializable");
            if (!value.GetType().IsSerializable)
                throw new ArgumentException("value is not serializable");
            if ((expiryHint != null) && !expiryHint.GetType().IsSerializable)
                throw new ArgumentException("expiryHint is not not serializable");
            if ((evictionHint != null) && !evictionHint.GetType().IsSerializable)
                throw new ArgumentException("evictionHint is not serializable");

            // Cache has possibly expired so do default.
            if (!IsRunning)
                return; 

            CacheEntry e = new CacheEntry(value, expiryHint, evictionHint);

            e.QueryInfo = queryInfo;
            e.Flag.Data |= flag.Data;

          

            // update the counters for various statistics
            try
            {
                CacheEntry clone;
                    clone = e;
                _context.PerfStatsColl.MsecPerUpdBeginSample();
                Insert(key, e, null, LockAccessType.IGNORE_LOCK, operationContext);
                _context.PerfStatsColl.MsecPerUpdEndSample();
            }
            catch (Exception inner)
            {
                _context.NCacheLog.CriticalInfo("Cache.Insert():", inner.ToString());
                throw;
            }
        }
Ejemplo n.º 17
0
 internal void Insert(object key, object value, ExpirationHint expiryHint, EvictionHint evictionHint, Hashtable queryInfo, OperationContext operationContext)
 {
     Insert(key, value, expiryHint, evictionHint, queryInfo, new BitSet(), operationContext);
 }
Ejemplo n.º 18
0
        /// <summary>
        /// Overload of Insert operation for bulk inserts. Uses EvictionHint and ExpirationHint arrays.
        /// </summary>
        public IDictionary Insert(object[] keys, object[] values, CallbackEntry[] callbackEnteries,
                                           ExpirationHint[] expirations, EvictionHint[] evictions,
                                           Hashtable[] queryInfos, BitSet[] flags,OperationContext operationContext)
        {
            if (ServerMonitor.MonitorActivity) ServerMonitor.LogClientActivity("Cache.InsertBlk", "");

            if (keys == null) throw new ArgumentNullException("keys");
            if (values == null) throw new ArgumentNullException("items");
            if (keys.Length != values.Length) throw new ArgumentException("keys count is not equals to values count");
           

            CacheEntry[] ce = new CacheEntry[values.Length];
            long[] sizes = null;
            object dataSize = operationContext.GetValueByField(OperationContextFieldName.ValueDataSize);
            if (dataSize != null)
            {
                sizes = (long[])dataSize;
            }
            for (int i = 0; i < values.Length; i++)
            {

                if (keys[i] == null) throw new ArgumentNullException("key");
                if (values[i] == null) throw new ArgumentNullException("value");

                if (!keys[i].GetType().IsSerializable)
                    throw new ArgumentException("key is not serializable");
                if (!values[i].GetType().IsSerializable)
                    throw new ArgumentException("value is not serializable");
                if ((expirations[i] != null) && !expirations[i].GetType().IsSerializable)
                    throw new ArgumentException("expiryHint is not not serializable");
                if ((evictions[i] != null) && !evictions[i].GetType().IsSerializable)
                    throw new ArgumentException("evictionHint is not serializable");

                // Cache has possibly expired so do default.
                if (!IsRunning) return null;

                ce[i] = new CacheEntry(values[i], expirations[i], evictions[i]);



                ce[i].QueryInfo = queryInfos[i];
                ce[i].Flag.Data |= flags[i].Data;
                if(sizes != null)
                    ce[i].DataSize = sizes[i];
                if (callbackEnteries[i] != null)
                {
                    CallbackEntry cloned = callbackEnteries[i].Clone() as CallbackEntry;
                    cloned.Value = values[i];
                    cloned.Flag = ce[i].Flag;
                    ce[i].Value = cloned;
                }
            }

            /// update the counters for various statistics
            try
            {
               

                HPTimeStats insertTime = new HPTimeStats();
                insertTime.BeginSample();

                IDictionary result = Insert(keys, ce, operationContext);

                insertTime.EndSample();

                return result;
            }
            catch (Exception inner)
            {
                throw;
            }
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Overload of Insert operation for bulk inserts. Uses additional EvictionHint and ExpirationHint parameters.
        /// </summary>
        public IDictionary Insert(object[] keys, object[] values, ExpirationHint expiryHint, EvictionHint evictionHint, OperationContext operationContext)
        {

            if (keys == null) throw new ArgumentNullException("keys");
            if (values == null) throw new ArgumentNullException("items");
            if (keys.Length != values.Length)
                throw new ArgumentException("keys count is not equals to values count");

            CacheEntry[] ce = new CacheEntry[values.Length];

            for (int i = 0; i < values.Length; i++)
            {
                object key = keys[i];
                object value = values[i];


                if (key == null) throw new ArgumentNullException("key");
                if (value == null) throw new ArgumentNullException("value");

                if (!key.GetType().IsSerializable)
                    throw new ArgumentException("key is not serializable");
                if (!value.GetType().IsSerializable)
                    throw new ArgumentException("value is not serializable");
                if ((expiryHint != null) && !expiryHint.GetType().IsSerializable)
                    throw new ArgumentException("expiryHint is not not serializable");
                if ((evictionHint != null) && !evictionHint.GetType().IsSerializable)
                    throw new ArgumentException("evictionHint is not serializable");

                // Cache has possibly expired so do default.
                if (!IsRunning) return null; 

                ce[i] = new CacheEntry(value, expiryHint, evictionHint);

            }
            /// update the counters for various statistics
            try
            {
                return Insert(keys, ce, operationContext);
            }
            catch (Exception inner)
            {
                throw;
            }
        }
Ejemplo n.º 20
0
 /// <summary>
 /// Overload of Insert operation for bulk inserts. Uses an additional EvictionHint parameter to be used 
 /// for Item auto eviction policy.
 /// </summary>
 public IDictionary Insert(object[] keys, object[] values, EvictionHint evictionHint, OperationContext operationContext)
 {
     return Insert(keys, values, null, evictionHint, operationContext);
 }
Ejemplo n.º 21
0
        void IEvictionPolicy.Notify(object key, EvictionHint oldhint, EvictionHint newHint)
        {
            
            //always use the new priority eviction hint.
            EvictionHint hint = newHint;
            if (hint != null)
            {
                CacheItemPriority hintPriority = ((PriorityEvictionHint)hint).Priority;

                if (hintPriority == CacheItemPriority.Default)
                {
                    hintPriority = this._priority;//set the default priority from the config.
                    ((PriorityEvictionHint)hint).Priority = this._priority;
                }

                if ((oldhint != null))
                {

                    CacheItemPriority oldPriority = ((PriorityEvictionHint)oldhint).Priority;
                    CacheItemPriority newPriority = ((PriorityEvictionHint)newHint).Priority;
                    if (oldPriority != newPriority)
                    {
                        IEvictionPolicy temp = this as IEvictionPolicy;
                        temp.Remove(key, oldhint);
                    }


                }

                lock (_index.SyncRoot)
                {
                    int changedIndex = -1;
                    switch (hintPriority)
                    {
                        case CacheItemPriority.Low:
                            if (_index[0] == null)
                                _index[0] = new Hashtable(25000, 0.7f);
                            _index[0][key] = hint;
                            changedIndex = 0;
                            break;
						case CacheItemPriority.BelowNormal:
                            if (_index[1] == null)
                                _index[1] = new Hashtable(25000, 0.7f);
                            _index[1][key] = hint;
                            changedIndex = 1;
                            break;
						case CacheItemPriority.Normal:
                            if (_index[2] == null)
                                _index[2] = new Hashtable(25000, 0.7f);
                            _index[2][key] = hint;
                            changedIndex = 2;
                            break;
						case CacheItemPriority.AboveNormal:
                            if (_index[3] == null)
                                _index[3] = new Hashtable(25000, 0.7f);
                            _index[3][key] = hint;
                            changedIndex = 3;
                            break;
						case CacheItemPriority.High:
                            if (_index[4] == null)
                                _index[4] = new Hashtable(25000, 0.7f);
                            _index[4][key] = hint;
                            changedIndex = 4;
                            break;
                    }

                    if (changedIndex > -1 && _index[changedIndex].Count > _evictionIndexMaxCounts[changedIndex])
                    {
                        _evictionIndexMaxCounts[changedIndex] = _index[changedIndex].Count;
                    }
                }
            }
        }
Ejemplo n.º 22
0
        /// <summary>
        /// Overload of Add operation. uses additional paramer of Flag for checking if compressed or not
        /// </summary>
        public void Add(object key, object value,
                        ExpirationHint expiryHint, EvictionHint evictionHint,
                        Hashtable queryInfo, BitSet flag, 
                       OperationContext operationContext)
        {
            if (key == null) throw new ArgumentNullException("key");
            if (value == null) throw new ArgumentNullException("value");

            if (!key.GetType().IsSerializable)
                throw new ArgumentException("key is not serializable");
            if (!value.GetType().IsSerializable)
                throw new ArgumentException("value is not serializable");
            if ((expiryHint != null) && !expiryHint.GetType().IsSerializable)
                throw new ArgumentException("expiryHint is not serializable");
            if ((evictionHint != null) && !evictionHint.GetType().IsSerializable)
                throw new ArgumentException("evictionHint is not serializable");

            // Cache has possibly expired so do default.
            if (!IsRunning) return; 
           
            CacheEntry e = new CacheEntry(value, expiryHint, evictionHint);
            ////Object size for inproc
            object dataSize = operationContext.GetValueByField(OperationContextFieldName.ValueDataSize);
            if (dataSize != null)
                e.DataSize = Convert.ToInt64(dataSize);
           
            e.QueryInfo = queryInfo;
            e.Flag.Data |= flag.Data;        
            try
            {
                HPTimeStats addTime = new HPTimeStats();
                _context.PerfStatsColl.MsecPerAddBeginSample();
                
                addTime.BeginSample();
                Add(key, e, operationContext);
                addTime.EndSample();
                _context.PerfStatsColl.MsecPerAddEndSample();
            }
            catch (Exception inner)
            {
                throw;
            }
        }
Ejemplo n.º 23
0
 void IEvictionPolicy.Remove(object key, EvictionHint hint)
 {
     lock (_index.SyncRoot)
     {
         if (_index != null)
             for (int i = 0; i < 5; i++)
             {
                 if (_index[i] != null)
                     if (_index[i].Contains(key))
                     {
                         _index[i].Remove(key);
                         if (_index[i].Count == 0)
                         {
                             _index[i] = null;
                             _evictionIndexMaxCounts[i] = 0;
                         }
                     }
             }
     }
 }
Ejemplo n.º 24
0
        public static void WriteEvcHint(CompactWriter writer, EvictionHint evcHint)
        {
            if (evcHint == null)
            {
                writer.Write((short)EvictionHintType.NULL);
                return;                
            }

            writer.Write((short)evcHint._hintType);
            ((ICompactSerializable)evcHint).Serialize(writer);
            return;
        }
Ejemplo n.º 25
0
 void ICompactSerializable.Deserialize(CompactReader reader)
 {
     lock (this)
     {
         Value = reader.ReadObject();
         _bitset = new BitSet(reader.ReadByte());
         _evh = EvictionHint.ReadEvcHint(reader);
         _exh = ExpirationHint.ReadExpHint(reader);
         _queryInfo = (Hashtable)reader.ReadObject();
         _size = reader.ReadInt64();
         lockMetaInfo = reader.ReadObject() as LockMetaInfo;
         _creationTime = reader.ReadDateTime();
         _lastModifiedTime = reader.ReadDateTime();
         _priorityValue = (CacheItemPriority)reader.ReadInt32();
         _type = reader.ReadObject() as string;
     }
 }
Ejemplo n.º 26
0
        public void Insert(object key, object value,
                           ExpirationHint expiryHint, EvictionHint evictionHint,
            Hashtable queryInfo, BitSet flag, object lockId, LockAccessType accessType, OperationContext operationContext)
        {
            try
            {
                if (ServerMonitor.MonitorActivity) ServerMonitor.LogClientActivity("Cache.Insert", "");
                if (key == null) throw new ArgumentNullException("key");
                if (value == null) throw new ArgumentNullException("value");

                if (!key.GetType().IsSerializable)
                    throw new ArgumentException("key is not serializable");
                if (!value.GetType().IsSerializable)
                    throw new ArgumentException("value is not serializable");
                if ((expiryHint != null) && !expiryHint.GetType().IsSerializable)
                    throw new ArgumentException("expiryHint is not not serializable");
                if ((evictionHint != null) && !evictionHint.GetType().IsSerializable)
                    throw new ArgumentException("evictionHint is not serializable");

                // Cache has possibly expired so do default.
                if (!IsRunning)
                    return; 

                CacheEntry e = new CacheEntry(value, expiryHint, evictionHint);
                e.QueryInfo = queryInfo;
                e.Flag.Data |= flag.Data;

                object dataSize = operationContext.GetValueByField(OperationContextFieldName.ValueDataSize);
                if (dataSize != null)
                    e.DataSize = Convert.ToInt64(dataSize);
          


            /// update the counters for various statistics
            
                _context.PerfStatsColl.MsecPerUpdBeginSample();
                Insert(key, e, lockId, accessType, operationContext);
                _context.PerfStatsColl.MsecPerUpdEndSample();
            }
            catch (Exception inner)
            {
                if (_context.NCacheLog.IsErrorEnabled) _context.NCacheLog.Error("Cache.Insert():", inner.ToString());
                throw;
            }
        }
Ejemplo n.º 27
0
 /// <summary>
 /// Performs application-defined tasks associated with freeing, releasing, or 
 /// resetting unmanaged resources.
 /// </summary>
 void IDisposable.Dispose()
 {
     lock (this)
     {
         if (_exh != null)
         {
             ((IDisposable)_exh).Dispose();
             _exh = null;
         }
         _evh = null;
     }
 }
Ejemplo n.º 28
0
        void IEvictionPolicy.Notify(object key, EvictionHint oldhint, EvictionHint newHint)
        {
            //always use the new priority eviction hint.
            EvictionHint hint = newHint;

            if (hint != null)
            {
                CacheItemPriority hintPriority = ((PriorityEvictionHint)hint).Priority;

                if (hintPriority == CacheItemPriority.Default)
                {
                    hintPriority = this._priority;//set the default priority from the config.
                    ((PriorityEvictionHint)hint).Priority = this._priority;
                }

                if ((oldhint != null))
                {
                    CacheItemPriority oldPriority = ((PriorityEvictionHint)oldhint).Priority;
                    CacheItemPriority newPriority = ((PriorityEvictionHint)newHint).Priority;
                    if (oldPriority != newPriority)
                    {
                        IEvictionPolicy temp = this as IEvictionPolicy;
                        temp.Remove(key, oldhint);
                    }
                }

                lock (_index.SyncRoot)
                {
                    int changedIndex = -1;
                    switch (hintPriority)
                    {
                    case CacheItemPriority.Low:
                        if (_index[0] == null)
                        {
                            _index[0] = new Hashtable(25000, 0.7f);
                        }
                        _index[0][key] = hint;
                        changedIndex   = 0;
                        break;

                    case CacheItemPriority.BelowNormal:
                        if (_index[1] == null)
                        {
                            _index[1] = new Hashtable(25000, 0.7f);
                        }
                        _index[1][key] = hint;
                        changedIndex   = 1;
                        break;

                    case CacheItemPriority.Normal:
                        if (_index[2] == null)
                        {
                            _index[2] = new Hashtable(25000, 0.7f);
                        }
                        _index[2][key] = hint;
                        changedIndex   = 2;
                        break;

                    case CacheItemPriority.AboveNormal:
                        if (_index[3] == null)
                        {
                            _index[3] = new Hashtable(25000, 0.7f);
                        }
                        _index[3][key] = hint;
                        changedIndex   = 3;
                        break;

                    case CacheItemPriority.High:
                        if (_index[4] == null)
                        {
                            _index[4] = new Hashtable(25000, 0.7f);
                        }
                        _index[4][key] = hint;
                        changedIndex   = 4;
                        break;
                    }

                    if (changedIndex > -1 && _index[changedIndex].Count > _evictionIndexMaxCounts[changedIndex])
                    {
                        _evictionIndexMaxCounts[changedIndex] = _index[changedIndex].Count;
                    }
                }
            }
        }
Ejemplo n.º 29
0
 public EvictionHint CompatibleHint(EvictionHint eh, PoolManager poolManager)
 {
     return(_evctPolicy.CompatibleHint(eh, poolManager));
 }
Ejemplo n.º 30
0
 /// <summary>
 /// Overload of Add operation. Uses an additional EvictionHint parameter to be used for 
 /// Item auto eviction policy.
 /// </summary>
 internal void Add(object key, object value, EvictionHint evictionHint)
 {
     Add(key, value, null, evictionHint, new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation));
 }