Esempio n. 1
0
        public T Pick <T>(string objectType)
        {
            ObjectJar jar           = _GetObjectJar(objectType);
            var       recycleObject = jar.Pick();

            if (null == recycleObject && null != this.factory)
            {
                recycleObject = this.factory.CreateObject(objectType);

                // Load more 1/2 jar MaxCount objects
                if (!this.createOperations.Contains(objectType))
                {
                    lock (this.createOperations) {
                        this.createOperations.Add(objectType);
                    }
                    PreloadAsync(objectType, jar.MaxCount >> 1, () =>
                    {
                        lock (this.createOperations) {
                            this.createOperations.Remove(objectType);
                        }
                    });
                }
            }

            if (null != recycleObject)
            {
                this.processer.RecoverObject(recycleObject);
            }

            return((T)recycleObject);
        }
Esempio n. 2
0
 private void _DisposeObjectJar(ObjectJar jar)
 {
     while (jar.Count > 0)
     {
         object recycleObject = jar.Pick();
         if (null != recycleObject)
         {
             this.factory.DestroyObject(recycleObject);
         }
     }
     jar.Dispose();
 }
Esempio n. 3
0
        private object _Pick(string type)
        {
            ObjectJar jar           = _GetObjectJar(type);
            var       recycleObject = jar.Pick();

            if (null == recycleObject)
            {
                recycleObject = this.factory.CreateObject(type);
            }

            if (null != recycleObject)
            {
                this.processer.RecoverObject(recycleObject);
            }

            return(recycleObject);
        }