以下是一个简单的 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);

需要注意的是,由于对象池的实现使用了锁机制,所以在高并发场景下可能会影响性能。可以考虑使用无锁实现或其他更高效的实现方式。

C# 对象池实现源码:提升性能的有效技巧

原文地址: http://www.cveoy.top/t/topic/lO5Q 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录