Пример #1
0
		public object GetValue(object syncObject, object key)
		{
			WeakReference weakReference;
			object target;
			object obj;
			object target1;
			object obj1;
			HopperCache.LastHolder lastHolder = this.mruEntry;
			if (lastHolder != null && key.Equals(lastHolder.Key))
			{
				if (this.weak)
				{
					WeakReference value = lastHolder.Value as WeakReference;
					weakReference = value;
					if (value == null)
					{
						return lastHolder.Value;
					}
					target = weakReference.Target;
					if (target == null)
					{
						this.mruEntry = null;
						goto Label0;
					}
					else
					{
						return target;
					}
				}
				return lastHolder.Value;
			}
		Label0:
			object item = this.outstandingHopper[key];
			if (this.weak)
			{
				WeakReference weakReference1 = item as WeakReference;
				weakReference = weakReference1;
				if (weakReference1 == null)
				{
					goto Label3;
				}
				obj = weakReference.Target;
				goto Label2;
			}
		Label3:
			obj = item;
		Label2:
			target = obj;
			if (target == null)
			{
				item = this.strongHopper[key];
				if (this.weak)
				{
					WeakReference weakReference2 = item as WeakReference;
					weakReference = weakReference2;
					if (weakReference2 == null)
					{
						goto Label5;
					}
					target1 = weakReference.Target;
					goto Label4;
				}
			Label5:
				target1 = item;
			Label4:
				target = target1;
				if (target == null)
				{
					item = this.limitedHopper[key];
					if (this.weak)
					{
						WeakReference weakReference3 = item as WeakReference;
						weakReference = weakReference3;
						if (weakReference3 == null)
						{
							goto Label7;
						}
						obj1 = weakReference.Target;
						goto Label6;
					}
				Label7:
					obj1 = item;
				Label6:
					target = obj1;
					if (target == null)
					{
						return null;
					}
				}
				this.mruEntry = new HopperCache.LastHolder(key, item);
				int num = 1;
				try
				{
					try
					{
					}
					finally
					{
						num = Interlocked.CompareExchange(ref this.promoting, 1, 0);
					}
					if (num == 0)
					{
						if (this.outstandingHopper.Count < this.hopperSize)
						{
							this.outstandingHopper[key] = item;
						}
						else
						{
							lock (syncObject)
							{
								Hashtable hashtables = this.limitedHopper;
								hashtables.Clear();
								hashtables.Add(key, item);
								try
								{
								}
								finally
								{
									this.limitedHopper = this.strongHopper;
									this.strongHopper = this.outstandingHopper;
									this.outstandingHopper = hashtables;
								}
							}
						}
					}
				}
				finally
				{
					if (num == 0)
					{
						this.promoting = 0;
					}
				}
				return target;
			}
			else
			{
				this.mruEntry = new HopperCache.LastHolder(key, item);
				return target;
			}
		}
Пример #2
0
        public object GetValue(object syncObject, object key)
        {
            WeakReference weakReference;
            object        target;
            object        obj;
            object        target1;
            object        obj1;

            HopperCache.LastHolder lastHolder = this.mruEntry;
            if (lastHolder != null && key.Equals(lastHolder.Key))
            {
                if (this.weak)
                {
                    WeakReference value = lastHolder.Value as WeakReference;
                    weakReference = value;
                    if (value == null)
                    {
                        return(lastHolder.Value);
                    }
                    target = weakReference.Target;
                    if (target == null)
                    {
                        this.mruEntry = null;
                        goto Label0;
                    }
                    else
                    {
                        return(target);
                    }
                }
                return(lastHolder.Value);
            }
Label0:
            object item = this.outstandingHopper[key];

            if (this.weak)
            {
                WeakReference weakReference1 = item as WeakReference;
                weakReference = weakReference1;
                if (weakReference1 == null)
                {
                    goto Label3;
                }
                obj = weakReference.Target;
                goto Label2;
            }
Label3:
            obj = item;
Label2:
            target = obj;
            if (target == null)
            {
                item = this.strongHopper[key];
                if (this.weak)
                {
                    WeakReference weakReference2 = item as WeakReference;
                    weakReference = weakReference2;
                    if (weakReference2 == null)
                    {
                        goto Label5;
                    }
                    target1 = weakReference.Target;
                    goto Label4;
                }
Label5:
                target1 = item;
Label4:
                target = target1;
                if (target == null)
                {
                    item = this.limitedHopper[key];
                    if (this.weak)
                    {
                        WeakReference weakReference3 = item as WeakReference;
                        weakReference = weakReference3;
                        if (weakReference3 == null)
                        {
                            goto Label7;
                        }
                        obj1 = weakReference.Target;
                        goto Label6;
                    }
Label7:
                    obj1 = item;
Label6:
                    target = obj1;
                    if (target == null)
                    {
                        return(null);
                    }
                }
                this.mruEntry = new HopperCache.LastHolder(key, item);
                int num = 1;
                try
                {
                    try
                    {
                    }
                    finally
                    {
                        num = Interlocked.CompareExchange(ref this.promoting, 1, 0);
                    }
                    if (num == 0)
                    {
                        if (this.outstandingHopper.Count < this.hopperSize)
                        {
                            this.outstandingHopper[key] = item;
                        }
                        else
                        {
                            lock (syncObject)
                            {
                                Hashtable hashtables = this.limitedHopper;
                                hashtables.Clear();
                                hashtables.Add(key, item);
                                try
                                {
                                }
                                finally
                                {
                                    this.limitedHopper     = this.strongHopper;
                                    this.strongHopper      = this.outstandingHopper;
                                    this.outstandingHopper = hashtables;
                                }
                            }
                        }
                    }
                }
                finally
                {
                    if (num == 0)
                    {
                        this.promoting = 0;
                    }
                }
                return(target);
            }
            else
            {
                this.mruEntry = new HopperCache.LastHolder(key, item);
                return(target);
            }
        }