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(); } } }
private void SetLastUsedTime(T item) { IIdlePoolItem poolItem = item as IIdlePoolItem; if (poolItem != null) { poolItem.LastUsedTime = DateTime.UtcNow; } }