コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="key"></param>
        /// <param name="method"></param>
        /// <returns></returns>
        public override object GetItem(string key, StorageBase.ComputeItemMethod method)
        {
            long index = (uint)key.GetHashCode() % ItemsList.Length;
            var  items = ItemsList[index];

            DateTime now = DateTime.Now;

            lock (items)
            {
                DictionaryValue item;
                if (!items.TryGetValue(key, out item) || item.ExpirationTime <= now)
                {
                    DateTime expiration;

                    item = new DictionaryValue()
                    {
                        Value = method(out expiration), ExpirationTime = expiration
                    };

                    if (expiration > now)   // item can be added into the cache
                    {
                        items[key] = item;
                    }

                    // update DictionaryInfo
                    DictionaryInfo info = ItemsListInfo[index];

                    if (expiration < info.MinExpirationTime)
                    {
                        info.MinExpirationTime = expiration;
                    }

                    // check some other items for expiration
                    if (info.MinExpirationTime < now &&                            // some items expired
                        info.LastCheck < now.AddMinutes(-CleanupsIntervalMinutes)) // interval between cleanups
                    {
                        RemoveExpired(items, info);
                    }
                }

                return(item.Value);
            }
        }
コード例 #2
0
        public override object GetItem(string key, StorageBase.ComputeItemMethod method)
        {
            DateTime expiration;

            return(method(out expiration));
        }