本文示例使用Dictionary构件一个线程安全的内存cache对象,使用System.Threading.ReaderWriterLock锁控制提升并发同步效率; 参考MSND:定义支持单个写线程和多个读线程的锁 public class GenericCache<TKey,TValue> { #region Fields /// <summary> /// 内部Dictionary容器 /// </summary> private Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>(); /// <summary> /// 用于并发同步访问的RW锁对象 /// </summary> private ReaderWriterLock rwLock = new ReaderWriterLock(); /// <summary> /// 指定超时时间 /// </summary> private readonly TimeSpan lockTimeOut = TimeSpan.FromMilliseconds(100); #endregion #region Methods /// <summary> /// 将指定的键值添加到字典中 /// </summary> /// <param name="key"></param> /// <param name="value"></param> public void Add(TKey key,TValue value) { bool isExisting = false; rwLock.AcquireWriterLock(lockTimeOut); try { if (!dictionary.ContainsKey(key)) dictionary.Add(key, value); else isExisting = true; } finally { rwLock.ReleaseWriterLock(); } if (isExisting) throw new IndexOutOfRangeException(); } /// <summary> /// 获取指定的键相关联的值 /// </summary> /// <param name="key"></param> /// <param name="value"></param> /// <returns></returns> public bool TryGetValue(TKey key, out TValue value) { rwLock.AcquireReaderLock(lockTimeOut); bool result; try { result = dictionary.TryGetValue(key,out value); } finally { rwLock.ReleaseReaderLock(); } return result; } /// <summary> /// 从Dictionary中移除所有健和值 /// </summary> public void Clear() { if (dictionary.Count > 0) { rwLock.AcquireWriterLock(lockTimeOut); try { dictionary.Clear(); } finally { rwLock.ReleaseWriterLock(); } } } /// <summary> /// 判断是否包含某指定的键 /// </summary> /// <param name="key"></param> /// <returns></returns> public bool ContainsKey(TKey key) { if (dictionary.Count <= 0) return false; bool result; rwLock.AcquireReaderLock(lockTimeOut); try { result = dictionary.ContainsKey(key); } finally { rwLock.ReleaseReaderLock(); } return result; } #endregion #region /// <summary> /// 获取包含的键值对数目 /// </summary> public int Count { get { return dictionary.Count; } } #endregion }