在现代软件开发中,缓存是提升系统性能的关键技术之一。然而,内存资源有限,因此需要一种合理的缓存淘汰策略来决定哪些数据应该被保留,哪些应该被移除。LRU(Least Recently Used,最近最少使用) 是最常用且高效的缓存淘汰算法之一。本文将手把手教你用 C# 语言 实现一个完整的 LRU 缓存,即使你是编程小白也能轻松掌握!
LRU 的核心思想是:如果一个数据最近被访问过,那么它将来被再次访问的概率也更高;反之,长时间未被使用的数据,未来被访问的可能性较低。 因此,当缓存满时,优先淘汰“最近最少使用”的数据。
C# 是 .NET 平台的核心语言,广泛应用于企业级应用、Web 后端和桌面程序开发。通过 C# 实现 LRU 缓存,不仅能加深对 .NET 内存管理 的理解,还能为实际项目提供高性能的本地缓存解决方案。
要高效实现 LRU,我们需要同时满足两个操作的时间复杂度为 O(1):
为此,我们通常结合 哈希表(Dictionary) 和 双向链表(LinkedList) 来实现:
下面是一个完整的 LRU 缓存类实现:
using System;using System.Collections.Generic;public class LRUCache<TKey, TValue>{ private readonly int _capacity; private readonly Dictionary<TKey, LinkedListNode<KeyValuePair<TKey, TValue>>> _cache; private readonly LinkedList<KeyValuePair<TKey, TValue>> _lruList; public LRUCache(int capacity) { _capacity = capacity; _cache = new Dictionary<TKey, LinkedListNode<KeyValuePair<TKey, TValue>>>(); _lruList = new LinkedList<KeyValuePair<TKey, TValue>>(); } public TValue Get(TKey key) { if (!_cache.TryGetValue(key, out var node)) { throw new KeyNotFoundException($"Key {key} not found in cache."); } // 将该节点移到链表头部(表示最近使用) _lruList.Remove(node); _lruList.AddFirst(node); return node.Value.Value; } public void Put(TKey key, TValue value) { if (_cache.TryGetValue(key, out var existingNode)) { // 更新值并移到头部 existingNode.Value = new KeyValuePair<TKey, TValue>(key, value); _lruList.Remove(existingNode); _lruList.AddFirst(existingNode); } else { if (_cache.Count >= _capacity) { // 缓存已满,移除尾部(最久未使用) var last = _lruList.Last; _lruList.RemoveLast(); _cache.Remove(last.Value.Key); } // 添加新节点到头部 var newNode = new LinkedListNode<KeyValuePair<TKey, TValue>>( new KeyValuePair<TKey, TValue>(key, value)); _lruList.AddFirst(newNode); _cache[key] = newNode; } }}
下面是一个简单的使用示例:
class Program{ static void Main() { var cache = new LRUCache<string, int>(2); // 容量为2 cache.Put("a", 1); cache.Put("b", 2); Console.WriteLine(cache.Get("a")); // 输出 1 cache.Put("c", 3); // 此时 "b" 被淘汰 // cache.Get("b"); // 会抛出异常 Console.WriteLine(cache.Get("c")); // 输出 3 }}
通过本文,你已经掌握了 LRU缓存算法 的原理,并学会了如何在 C# 中高效实现它。这种实现方式兼顾了性能与可读性,适用于各种需要本地缓存的场景。
记住我们的四个核心 SEO关键词:
希望这篇教程能帮助你构建更高效、更智能的应用程序!如果你有任何问题,欢迎在评论区留言交流。
本文由主机测评网于2025-12-10发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125717.html