用c#写一个对象池
时间: 2023-08-02 18:14:13 浏览: 75
好的,下面是一个简单的对象池实现,使用C#语言:
```csharp
using System.Collections.Generic;
public class ObjectPool<T>
{
private readonly Queue<T> pool = new Queue<T>();
private readonly int maxSize;
private readonly System.Func<T> createFunc;
public ObjectPool(int maxSize, System.Func<T> createFunc)
{
this.maxSize = maxSize;
this.createFunc = createFunc;
}
public T Get()
{
if (pool.Count > 0)
{
return pool.Dequeue();
}
else
{
return createFunc();
}
}
public void Release(T obj)
{
if (pool.Count < maxSize)
{
pool.Enqueue(obj);
}
}
}
```
使用方法如下:
```csharp
public class MyObject
{
public void Reset() { /* Reset the object to its default state */ }
}
public class MyObjectPool
{
private ObjectPool<MyObject> pool = new ObjectPool<MyObject>(10, () => new MyObject());
public MyObject Get()
{
var obj = pool.Get();
obj.Reset(); // Reset object state if necessary
return obj;
}
public void Release(MyObject obj)
{
pool.Release(obj);
}
}
```
这个对象池有一个最大大小限制,如果池中的对象已经达到最大大小,则在释放对象时会丢弃超出最大大小的对象。可以根据需要调整最大大小。
另外,当从池中获取对象时,如果池中没有可用对象,则会自动创建一个新对象。如果需要更高效的实现,可以预先创建一些对象并添加到池中。
阅读全文