/// <summary> /// 从工厂中删除最近使用最少的客户端 /// </summary> public void RemoveFirst() { var first = LRUList.First; lock (_locker) { YfyClients.Remove(first.Value.Key); LRUList.RemoveFirst(); } }
/// <summary> /// 增加一个客户端 /// </summary> /// <param name="T">客户端索引类型</param> /// <param name="client">待增加的客户端</param> public void AddClient(Tkey T, YfyClient client) { var items = new LRUItems <Tkey, YfyClient>(T, client); var node = new LinkedListNode <LRUItems <Tkey, YfyClient> >(items); lock (_locker) { if (LRUList.Count >= MaxCapacity) { this.RemoveFirst(); } LRUList.AddLast(node); YfyClients.Add(T, node); } }
/// <summary> /// 根据给出的key,尝试得到相应的客户端 /// </summary> /// <param name="T">客户端索引类型</param> /// <param name="client">得到的客户端</param> /// <returns>是否成功</returns> public bool TryGetClient(Tkey T, out YfyClient client) { LinkedListNode <LRUItems <Tkey, YfyClient> > node; var result = YfyClients.TryGetValue(T, out node); if (result) { lock (_locker) { //LRU cache LRUList.Remove(node); LRUList.AddLast(node); } client = node.Value.Value; } else { client = null; } return(result); }