请写出C Sharp对象池代码
时间: 2024-04-29 09:23:23 浏览: 66
以下是一个简单的C#对象池示例:
```
public class ObjectPool<T> where T : new()
{
private readonly ConcurrentBag<T> _objects;
private readonly Func<T> _objectGenerator;
public ObjectPool(Func<T> objectGenerator)
{
_objects = new ConcurrentBag<T>();
_objectGenerator = objectGenerator ?? throw new ArgumentNullException(nameof(objectGenerator));
}
public T GetObject()
{
if (_objects.TryTake(out T item)) return item;
return _objectGenerator();
}
public void ReturnObject(T item)
{
_objects.Add(item);
}
}
```
然后,可以通过以下方式使用该对象池:
```
var pool = new ObjectPool<MyObject>(() => new MyObject());
// Get an object from the pool
var obj = pool.GetObject();
// Use the object
obj.DoSomething();
// Return the object to the pool
pool.ReturnObject(obj);
```
在这个示例中,对象池使用了一个ConcurrentBag来存储和管理对象。GetObject()方法首先尝试从池中获取一个对象,如果池为空,则调用_objectGenerator委托创建一个新对象。ReturnObject()方法将对象添加回池中,以便稍后重用。
阅读全文