我如何实现“;交换“;列表

本文关键字:交换 列表 实现 何实现 | 更新日期: 2023-09-27 18:19:41

我需要用定时器管理一些列表:这些列表中的每个元素都与一个定时器相关联,因此当定时器到期时,必须从列表中删除相应的元素。

通过这种方式,列表的长度不会增长太多,因为随着时间的推移,元素会逐渐删除。列表长度增加的速度也取决于添加新元素的速率。

然而,我需要添加以下限制:列表使用的RAM数量不超过一定的限制,即用户必须指定RAM中可以存储的最大项目数。因此,如果元素的添加率低,则所有项目都可以存储在RAM中。然而,如果元素的添加率很高,则旧项目很可能在其计时器到期之前丢失。

直觉上,我想从操作系统使用的交换技术中吸取教训。

class SwappingList
{
    private List<string> _list;
    private SwapManager _swapManager;
    public SwappingList(int capacity, SwapManager swapManager)
    {
        _list = new List<string>(capacity);
        _swapManager = swapManager;
        // TODO
    }
}

我管理的一个列表​​由恒定长度的字符串组成,并且它必须作为哈希表工作,所以我应该使用HashMap,但我如何定义HashMap对象的最大容量?

基本上,我想实现一种缓存机制,但我希望缓存使用的RAM仅限于多个项目或字节,这意味着尚未过期的旧项目必须移动到一个文件中。

我如何实现“;交换“;列表

根据上面的注释,您需要一个缓存机制。

.NET 4具有此内建(请参阅http://msdn.microsoft.com/en-us/library/system.runtime.caching.aspx)-它附带了可配置的缓存策略,您可以使用该策略来配置过期等。。。它甚至提供了一些事件,您可以将委托分配给这些事件,这些事件在删除缓存条目之前被调用,以进一步自定义此过程。。。

您不能指定HashMap的最大容量。您需要围绕它实现一个包装器,在每次插入后,该包装器都会检查是否达到了最大计数。

我不清楚你是否只问这些。如果你有更多的问题,请务必清楚地说明,并在每个问题上打上问号。