如何实现“交换”列表?

时间:2012-01-08 17:07:29

标签: c# .net

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

这样,列表的长度不会增长太多,因为随着时间的推移,元素会逐渐被删除。列表长度增加的速度还取决于新元素的添加速率。

但是我需要添加以下约束:列表使用的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对象的最大容量呢? / p>

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

2 个答案:

答案 0 :(得分:5)

根据上面的评论,您需要一种缓存机制。

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

答案 1 :(得分:1)

您无法指定HashMap的最大容量。您需要在它周围实现一个包装器,在每次插入之后,检查是否已达到最大计数。

我不清楚这是否就是你所要求的。如果您有更多问题,请务必清楚说明,并在每个问题上使用问号。