Example #1
0
        /// <summary>
        /// 从对象池获取对象
        /// </summary>
        /// <returns></returns>
        public System.Object RentObject()
        {
            lock (this)
            {
                if (FreeCount() <= 0 && ExtendPool() == false)
                {
                    return(null);
                }
                Int32 nHashCode = (Int32)m_FreeIndexArray[0];
                m_FreeIndexArray.RemoveAt(0);
                System.Object obj = m_ItemTable[nHashCode];
                m_UsingIndexArray.Add(nHashCode);

                if (m_bSupportRecycle == true)
                {
                    IRecycleable recyObj = (IRecycleable)obj;
                    if (recyObj != null)
                    {
                        recyObj.Init();
                    }
                }

#if BTDEBUG
                if (m_ItemUseFrequencyTable.Contains(nHashCode) == false)
                {
                    m_ItemUseFrequencyTable.Add(nHashCode, 0);
                }
                Int32 nFrequency = (Int32)m_ItemUseFrequencyTable[nHashCode];
                m_ItemUseFrequencyTable[nHashCode] = nFrequency + 1;
#endif
                return(obj);
            }
        }
Example #2
0
        /// <summary>
        /// 释放对象
        /// </summary>
        /// <returns></returns>
        public bool GiveBackObject(System.Object obj)
        {
            lock (this)
            {
                if (obj == null)
                {
                    return(false);
                }
                if (m_UsingIndexArray == null || m_FreeIndexArray == null || m_ItemTable == null)
                {
                    return(false);
                }
                if (m_bSupportRecycle == true)
                {
                    IRecycleable recycleable = (IRecycleable)obj;
                    if (recycleable != null)
                    {
                        recycleable.Clear();
                    }
                }
                Int32 nHashCode = obj.GetHashCode();
                if (m_UsingIndexArray.Contains(nHashCode) == false)
                {
                    return(false);
                }

                m_UsingIndexArray.Remove(nHashCode);
                m_FreeIndexArray.Add(nHashCode);
                return(true);
            }
        }
Example #3
0
        public static void Return(IRecycleable obj)
        {
            Console.WriteLine("Pool::Return");

            pool.Add(obj);
        }