写一个高效的缓存组件(对象池)
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; } }
相关文章推荐
- 蛙蛙推荐:设计一个高效的缓存管理服务
- 设计一个高效的缓存管理服务 C#
- 实现自己的O/R Mapping组件-高效缓存的思考
- 自己写的一个有点不同的分页组件,缓存三页的分页组件
- 一个技术汪的开源梦 —— 公共组件缓存之分布式缓存 Redis 实现篇
- 哪种缓存效果高?开源一个简单的缓存组件j2cache
- Java趣谈——如何构建一个高效且可伸缩的缓存
- 蛙蛙推荐:设计一个高效的缓存管理服务
- 关于Glide——一个高效的图片加载和缓存类库
- 你需要实现一个高效的缓存,它允许多个用户读,但只允许一个用户写
- Glide :一个android平台上的快速和高效的开源的多媒体资源管理库, 提供 多媒体文件的压缩,内存和磁盘缓存, 资源池的接口
- 如何使用Future和ConcurrentHashMap实现一个线程安全且高效的缓存
- 注册一个Web组件至全局缓存
- 设计一个高效的缓存管理服务
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
- 编程:实现一个高效的缓存系统?
- 如何使用一个不错的图表组件WebChart(免费)
- 一个高效的C++性能计数器模板
- MY_IDE:一个将Delphi的组件面板转变为多层并能自动隐藏的组件
- [原创]构造一个方便高效 INI 类