Ejemplo n.º 1
0
        public void TestEviction_Induced_ReducedToHalf()
        {
            const int maximum = 8;

            using (var target =
                       new StandardObjectPool <PooledObject>(
                           () => new PooledObject(),
                           new ObjectPoolConfiguration()
            {
                Name = "Pool",
                BorrowTimeout = null,
                EvitionInterval = TimeSpan.FromHours(1),
                ExhausionPolicy = ExhausionPolicy.ThrowException,
                MaximumPooled = maximum,
                MinimumReserved = 1
            }
                           ))
            {
                var items = new List <PooledObject>();
                try
                {
                    for (int i = 0; i < maximum; i++)
                    {
                        items.Add(target.Borrow());
                    }

                    foreach (var item in items)
                    {
                        target.Return(item);
                    }

                    Assert.That(target.LeasedCount, Is.EqualTo(maximum));
                    target.EvictExtraItems();
                    Assert.That(target.LeasedCount, Is.EqualTo(maximum / 2));
                    target.EvictExtraItems();
                    Assert.That(target.LeasedCount, Is.EqualTo(maximum / 4));
                    target.EvictExtraItems();
                    Assert.That(target.LeasedCount, Is.EqualTo(maximum / 8));
                    target.EvictExtraItems();
                    Assert.That(target.LeasedCount, Is.EqualTo(maximum / 8));
                }
                finally
                {
                    items.DisposeAll();
                }
            }
        }
Ejemplo n.º 2
0
        public void TestEviction_MinimumIsNotZero_PooledIsZero_Refilled()
        {
            const int minimum = 1;
            const int maximum = 2;

            using (var target =
                       new StandardObjectPool <PooledObject>(
                           () => new PooledObject(),
                           new ObjectPoolConfiguration()
            {
                BorrowTimeout = null,
                EvitionInterval = TimeSpan.FromMilliseconds(500),
                ExhausionPolicy = ExhausionPolicy.ThrowException,
                MaximumPooled = maximum,
                MinimumReserved = minimum
            }
                           ))
            {
                var items = new List <PooledObject>();
                try
                {
                    for (int i = 0; i < maximum; i++)
                    {
                        items.Add(target.Borrow());
                    }

                    Assert.That(target.PooledCount, Is.EqualTo(0));
                    target.EvictExtraItems();
                    Assert.That(target.PooledCount, Is.EqualTo(0));
                }
                finally
                {
                    items.DisposeAll();
                }
            }
        }