您的位置:首页 > 其它

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

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

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐