45 lines
905 B
C#
45 lines
905 B
C#
|
|
using System.Collections.Generic;
|
|||
|
|
|
|||
|
|
public class GenericPool<T> where T : new()
|
|||
|
|
{
|
|||
|
|
private Queue<T> _pool = new Queue<T>();
|
|||
|
|
private int _maxSize;
|
|||
|
|
|
|||
|
|
public GenericPool(int initialSize, int maxSize)
|
|||
|
|
{
|
|||
|
|
_maxSize = maxSize;
|
|||
|
|
for (int i = 0; i < initialSize; i++)
|
|||
|
|
{
|
|||
|
|
_pool.Enqueue(new T());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>ȡһ<C8A1><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public T Get()
|
|||
|
|
{
|
|||
|
|
if (_pool.Count > 0)
|
|||
|
|
{
|
|||
|
|
return _pool.Dequeue();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>δ<EFBFBD>ﵽ<EFBFBD><EFB5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><F2B4B4BD>¶<EFBFBD><C2B6><EFBFBD>
|
|||
|
|
if (_pool.Count < _maxSize)
|
|||
|
|
{
|
|||
|
|
return new T();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD><D7B3>쳣<EFBFBD><ECB3A3>
|
|||
|
|
return default(T);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
public void Return(T item)
|
|||
|
|
{
|
|||
|
|
if (item == null) return;
|
|||
|
|
|
|||
|
|
if (_pool.Count < _maxSize)
|
|||
|
|
{
|
|||
|
|
_pool.Enqueue(item);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|