C# 对象池实现源码:提升性能的有效技巧
以下是一个简单的 C# 对象池实现源码,可以用来提高代码性能,减少对象创建和销毁带来的开销。
using System.Collections.Generic;
public class ObjectPool<T> where T : new()
{
private readonly Stack<T> _pool = new Stack<T>();
private readonly int _maxSize;
public ObjectPool(int maxSize)
{
_maxSize = maxSize;
}
public T Get()
{
lock (_pool)
{
if (_pool.Count > 0)
return _pool.Pop();
}
return new T();
}
public void Put(T item)
{
lock (_pool)
{
if (_pool.Count < _maxSize)
_pool.Push(item);
}
}
}
使用时,可以先创建一个对象池实例,然后调用 Get() 方法获取一个对象,调用 Put() 方法将对象放回池中。
例如,创建一个可以缓存最多 10 个字符串的对象池:
var pool = new ObjectPool<string>(10);
获取一个字符串对象:
var str = pool.Get();
将字符串对象放回池中:
pool.Put(str);
需要注意的是,由于对象池的实现使用了锁机制,所以在高并发场景下可能会影响性能。可以考虑使用无锁实现或其他更高效的实现方式。
原文地址: http://www.cveoy.top/t/topic/lO5Q 著作权归作者所有。请勿转载和采集!