コード例 #1
0
        /// <summary>
        /// 从工厂中删除最近使用最少的客户端
        /// </summary>
        public void RemoveFirst()
        {
            var first = LRUList.First;

            lock (_locker)
            {
                YfyClients.Remove(first.Value.Key);
                LRUList.RemoveFirst();
            }
        }
コード例 #2
0
        /// <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);
            }
        }
コード例 #3
0
        /// <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);
        }