对象池接口
public interface IObjectPool<T>
{
T GetObject();
void ReturnObject(T obj);
}
通用对象池
using System;
using System.Collections.Generic;
public class ObjectPool<T> : IObjectPool<T>
{
private readonly Stack<T> _pool = new Stack<T>();
private readonly Func<T> _objectFactory;
public ObjectPool(Func<T> objectFactory, int initialSize)
{
_objectFactory = objectFactory ?? throw new ArgumentNullException(nameof(objectFactory));
for (int i = 0; i < initialSize; i++)
{
_pool.Push(_objectFactory());
}
}
public T GetObject()
{
return _pool.Count > 0 ? _pool.Pop() : _objectFactory();
}
public void ReturnObject(T obj)
{
if (obj == null) throw new ArgumentNullException(nameof(obj));
_pool.Push(obj);
}
}
使用
public class Worker
{
public void DoWork()
{
Console.WriteLine("Working...");
}
}
class Program
{
static void Main(string[] args)
{
// 创建一个初始包含1000个Worker对象的对象池
var pool = new ObjectPool<Worker>(() => new Worker(), 1000);
// 获取并使用Worker对象
for (int i = 0; i < 10; i++)
{
Worker worker = pool.GetObject();
worker.DoWork();
pool.ReturnObject(worker);
}
}
}