Пример #1
0
        private void ExpireIdleItems()
        {
            lock (this.itemStore)
            {
                int repeatCount = this.itemStore.Count;

                for (int i = 0; i < repeatCount; i++)
                {
                    IIdlePoolItem item = this.itemStore.Peek() as IIdlePoolItem;

                    if (item == null)
                    {
                        break;
                    }

                    if (!item.LastUsedTime.HasValue || this.idleTimeoutInSec <= 0 || (item.LastUsedTime.Value - DateTime.UtcNow).Seconds < this.idleTimeoutInSec)
                    {
                        // hack to advance pointer to the next item stored in slot
                        T ignoredItem = this.itemStore.Fetch();
                        this.itemStore.Store(ignoredItem);
                        continue;
                    }

                    Debug.Assert(item.Equals(this.itemStore.Fetch()), "Peeked item and fetched item are not the same");
                    item.DisposeItem();
                }
            }
        }
Пример #2
0
        private void SetLastUsedTime(T item)
        {
            IIdlePoolItem poolItem = item as IIdlePoolItem;

            if (poolItem != null)
            {
                poolItem.LastUsedTime = DateTime.UtcNow;
            }
        }