C#创建一个对象池
时间: 2023-07-27 07:13:21 浏览: 156
C#自定义对象池
对象池是一种提高性能的技术,它通过预先创建一定数量的对象并维护一个可用对象列表来避免频繁的对象创建和销毁。下面是一个简单的 C# 对象池实现:
```csharp
public class ObjectPool<T> where T : new()
{
private ConcurrentBag<T> _objects;
private Func<T> _objectGenerator;
public ObjectPool(Func<T> objectGenerator)
{
_objects = new ConcurrentBag<T>();
_objectGenerator = objectGenerator ?? throw new ArgumentNullException("objectGenerator");
}
public T GetObject()
{
if (_objects.TryTake(out T item))
{
return item;
}
else
{
return _objectGenerator();
}
}
public void PutObject(T item)
{
_objects.Add(item);
}
}
```
在上面的代码中,我们使用了 `ConcurrentBag` 来存储可用对象列表。`GetObject()` 方法首先尝试从可用对象列表中获取一个对象,如果列表为空,则通过 `_objectGenerator` 函数创建一个新的对象并返回。`PutObject()` 方法将不再使用的对象放回到可用对象列表中。
使用该对象池的示例代码:
```csharp
ObjectPool<MyClass> objectPool = new ObjectPool<MyClass>(() => new MyClass());
MyClass obj1 = objectPool.GetObject();
MyClass obj2 = objectPool.GetObject();
// 使用对象...
objectPool.PutObject(obj1);
objectPool.PutObject(obj2);
```
在上面的示例中,我们先创建了一个 `ObjectPool` 对象,然后通过两次调用 `GetObject()` 方法获取了两个对象。在使用完毕后,我们将这两个对象放回对象池中,以便下次使用。
阅读全文