Beispiel #1
0
 public object BorrowObject()
 {
     lock (sync)
     {
         if (closed)
         {
             throw new InvalidOperationException("The pool is closed.");
         }
         object useable = null;
         IEnumerator <object> objects          = passiveObjects.GetEnumerator();
         List <object>        destroyedObjects = new List <object>();
         while (objects.MoveNext() && useable == null)
         {
             PoolableObjectFactory.ActivateObject(objects.Current);
             if (PoolableObjectFactory.ValidateObject(objects.Current))
             {
                 useable = objects.Current;
             }
             else
             {
                 PoolableObjectFactory.DestroyObject(objects.Current);
                 destroyedObjects.Add(objects.Current);
             }
         }
         passiveObjects.RemoveAll(o => destroyedObjects.Contains(o));
         if (useable == null)
         {
             useable = PoolableObjectFactory.MakeObject();
             PoolableObjectFactory.ActivateObject(useable);
         }
         activeObjects.Add(useable);
         return(useable);
     }
 }
Beispiel #2
0
 public void AddObject()
 {
     lock (sync)
     {
         passiveObjects.Add(PoolableObjectFactory.MakeObject());
     }
 }