Example #1
0
        /// <summary>
        /// Discovers the and serialize.
        /// </summary>
        /// <param name="stream">The stream.</param>
        /// <param name="obj">The object.</param>
        /// <param name="objectType">Type of the object.</param>
        /// <exception cref="System.ArgumentNullException">The <paramref name="stream"/> is <c>null</c>.</exception>
        /// <exception cref="System.ArgumentNullException">The <paramref name="obj"/> is <c>null</c>.</exception>
        /// <exception cref="System.ArgumentNullException">The <paramref name="objectType"/> is <c>null</c>.</exception>
        public static void DiscoverAndSerialize(Stream stream, object obj, Type objectType)
        {
            Argument.IsNotNull("stream", stream);
            Argument.IsNotNull("obj", obj);
            Argument.IsNotNull("objectType", objectType);

            lock (Cache)
            {
                IObjectMetaData objectMetaData;
                if (Cache.Contains(objectType.FullName))
                {
                    objectMetaData = Cache[objectType.FullName];
                }
                else
                {
                    objectMetaData = new ObjectMetaData();
                    DiscoverTypeInfo(objectType, objectMetaData);
                    Cache.Add(objectType.FullName, objectMetaData);
                }

                Serialize(stream, obj, objectMetaData);
            }
        }
 private void Set <T>(string key, T tvalue, int duration)
 {
     GXLogging.Debug(log, "Set<T> key:", () => key + " value " + tvalue + " valuetype:" + tvalue.GetType());
     if (key != null)
     {
         SlidingTime expiration = null;
         if (duration > 0)
         {
             expiration = new SlidingTime(new TimeSpan(TimeSpan.TicksPerMinute * duration));
         }
         if (Preferences.Instrumented)
         {
             wmicache.Add(new WMICacheItem(key, expiration, tvalue));
         }
         cacheStorage.Add(key, tvalue);
         AddMetadata(key, expiration);
     }
 }
Example #3
0
        public IResult <IReadOnlyCollection <Commercial> > GetCommercials()
        {
            IReadOnlyCollection <Commercial> commercials = _cacheStorage.Get <IReadOnlyCollection <Commercial> >(CACHE_KEY);

            if (commercials == null)
            {
                var commercialResult = _commercialProvider.GetCommercials();
                if (commercialResult.IsSuccess())
                {
                    commercials = commercialResult.GetSuccessResult();
                    _cacheStorage.Add(CACHE_KEY, commercials, CACHE_MINUTES);
                }
                else
                {
                    return(new NoneResult <IReadOnlyCollection <Commercial> >());
                }
            }

            return(new SuccessResult <IReadOnlyCollection <Commercial> >(commercials));
        }
Example #4
0
        /// <summary>
        /// Método interno acionado para adicionar um novo item.
        /// </summary>
        /// <param name="key">Chave do item.</param>
        /// <param name="cacheEntry">Instancia da entrada que está sendo adicionada.</param>
        /// <param name="isUserOperation">True se for uma operação do usuário.</param>
        /// <returns>Resultado da operação.</returns>
        internal override CacheAddResult AddInternal(object key, CacheEntry cacheEntry, bool isUserOperation)
        {
            if (_cacheStore == null)
            {
                throw new InvalidOperationException();
            }
            if (_evictionPolicy != null)
            {
                if (cacheEntry.EvictionHint is PriorityEvictionHint)
                {
                    cacheEntry.Priority = ((PriorityEvictionHint)cacheEntry.EvictionHint).Priority;
                }
                cacheEntry.EvictionHint = _evictionPolicy.CompatibleHint(cacheEntry.EvictionHint);
            }
            StoreAddResult result = _cacheStore.Add(key, cacheEntry);

            if ((result == StoreAddResult.Success || result == StoreAddResult.SuccessNearEviction) && (_evictionPolicy != null))
            {
                _evictionPolicy.Notify(key, null, cacheEntry.EvictionHint);
            }
            switch (result)
            {
            case StoreAddResult.Success:
                return(CacheAddResult.Success);

            case StoreAddResult.KeyExists:
                return(CacheAddResult.KeyExists);

            case StoreAddResult.NotEnoughSpace:
                return(CacheAddResult.NeedsEviction);

            case StoreAddResult.SuccessNearEviction:
                return(CacheAddResult.SuccessNearEviction);
            }
            return(CacheAddResult.Failure);
        }
Example #5
0
 /// <summary>
 /// 添加缓存
 /// </summary>
 /// <param name="key"></param>
 /// <param name="obj"></param>
 public static void Add(String key, Object obj)
 {
     cacheInstance.Add(key, obj);
 }
Example #6
0
        /// <summary>
        /// Adds a pair of key and value to the cache. Throws an exception or reports error
        /// if the specified key already exists in the cache.
        /// </summary>
        /// <param name="key">key of the entry.</param>
        /// <param name="cacheEntry">the cache entry.</param>
        /// <returns>returns the result of operation.</returns>
        internal override CacheAddResult AddInternal(object key, CacheEntry cacheEntry, bool isUserOperation, OperationContext operationContext)
        {
            if (ServerMonitor.MonitorActivity)
            {
                ServerMonitor.LogClientActivity("LocalCache.Add_1", "");
            }
            if (_cacheStore == null)
            {
                throw new InvalidOperationException();
            }

            if (_evictionPolicy != null)
            {
                if (cacheEntry.EvictionHint is PriorityEvictionHint)
                {
                    cacheEntry.Priority = ((PriorityEvictionHint)cacheEntry.EvictionHint).Priority;
                }

                cacheEntry.EvictionHint = _evictionPolicy.CompatibleHint(cacheEntry.EvictionHint);
            }

            //No Need to insert Eviction if Eviction is turned off it will reduce cache-entry overhead
            if (_evictionPolicy == null)
            {
                cacheEntry.EvictionHint = null;
            }

            StoreAddResult result = _cacheStore.Add(key, cacheEntry, !isUserOperation);

            // Operation completed!
            if (result == StoreAddResult.Success || result == StoreAddResult.SuccessNearEviction)
            {
                if (_evictionPolicy != null)
                {
                    _evictionPolicy.Notify(key, null, cacheEntry.EvictionHint);
                }
            }
            if (result == StoreAddResult.NotEnoughSpace && !_notifyCacheFull)
            {
                _notifyCacheFull = true;
                _context.NCacheLog.Error("LocalCache.AddInternal", "The cache is full and not enough items could be evicted.");
            }

            if (_context.PerfStatsColl != null)
            {
                if (_evictionPolicy != null)
                {
                    _context.PerfStatsColl.SetEvictionIndexSize((long)_evictionPolicy.IndexInMemorySize);
                }

                if (_context.ExpiryMgr != null)
                {
                    _context.PerfStatsColl.SetExpirationIndexSize((long)_context.ExpiryMgr.IndexInMemorySize);
                }
            }


            switch (result)
            {
            case StoreAddResult.Success: return(CacheAddResult.Success);

            case StoreAddResult.KeyExists: return(CacheAddResult.KeyExists);

            case StoreAddResult.NotEnoughSpace: return(CacheAddResult.NeedsEviction);

            case StoreAddResult.SuccessNearEviction: return(CacheAddResult.SuccessNearEviction);
            }
            return(CacheAddResult.Failure);
        }