我正在寻找一种通用结构,这样我就可以提供一些物品。然后,每次我将一个项目添加到此列表时,将删除最旧的项目(具有最早访问权限的项目)以保留具有固定大小的项目。
每个项目都有一个密钥(在我的情况下是日期时间,但这应该是通用的)。
这个结构甚至可以只有一个方法:TItem Get(TKey key)
,但如果它还没有在缓存中,我们必须提供一个委托来检索它。
你知道这样的结构吗?理想情况下存在于.Net 4.5中?
我知道MemoryCache
但是:
它必须是一个更好的课程,不是吗?我当然可以自己做一个,但我不想重新发明轮子,我需要一些试验来获得真正有效的东西。
答案 0 :(得分:0)
您所描述的内容称为LRU(最近最少使用)缓存。该对的许多实现是具有LinkedList的Dictionary。 Dictionary提供快速键控访问,LinkedList提供快速删除最旧元素的功能。这两个操作在某种程度上相互矛盾,这就是为什么很难找到满足两者的单一结构的原因。
如果您在互联网上搜索LRU缓存,您会发现许多实现。我对我做过的一些实现做了3-post series。