首页 > 代码库 > 写一个高效的缓存组件(对象池)

写一个高效的缓存组件(对象池)

我们在写高效服务时,许多需要缓存,一般缓存组件都需要加锁,我最近想了一个方法,感觉还不错,分享一下。直接上代码:

    public abstract class SimpleObjPool<T> {        int _locker = 0;        int _cnt = 0;        T[] _ts;        public SimpleObjPool(int MaxSize) {            _ts = new T[MaxSize];        }        protected abstract T NewObj();        public T GetObj() {            int a = Interlocked.Exchange(ref _locker, 1);            if (a == 0) {                if (_cnt > 0) {                    _cnt--;                    T t = _ts[_cnt];                    Interlocked.Exchange(ref _locker, 0);                    return t;                }                Interlocked.Exchange(ref _locker, 0);            }            return NewObj();        }        public virtual bool FreeObj(T t) {            int a = Interlocked.Exchange(ref _locker, 1);            if (a == 0) {                if (_cnt < _ts.Length) {                    _ts[_cnt] = t;                    _cnt++;                      Interlocked.Exchange(ref _locker, 0);                    return true;                }                Interlocked.Exchange(ref _locker, 0);            }            return false;        }    }

写一个高效的缓存组件(对象池)