C# 2.0 Object Pool

class ObjectPool<T>
    {
        PoolItem
<T> m_Cur;
        
public ObjectPool()
        {
        }
        
public T GetNew()
        {
            
lock (this)
            {
                
if (null == m_Cur)
                {
                    
return System.Activator.CreateInstance<T>();
                }
                
else
                {
                    T ret 
= m_Cur.Next.PoolObject;
                    m_Cur 
= m_Cur.Next;
                    
return ret;
                }
            }
        }
        
public void Free(T o)
        {
            
lock (this)
            {
                
if (null == m_Cur)
                {
                    m_Cur 
= new PoolItem<T>(o);
                }
                
else
                {
                    m_Cur.Next 
= new PoolItem<T>(o);
                }
            }
        }
        
class PoolItem<TT>
        {
            
public PoolItem(TT o) { PoolObject = o; }
            
public TT PoolObject;
            
public PoolItem<TT> Next;
        }
posted @ 2007-04-05 18:26  looky  阅读(279)  评论(0编辑  收藏  举报