我需要使用计时器管理一些列表:这些列表的每个元素都与一个计时器相关联,因此当计时器到期时,必须从列表中删除相应的元素。
这样,列表的长度不会增长太多,因为随着时间的推移,元素会逐渐被删除。列表长度增加的速度还取决于新元素的添加速率。
但是我需要添加以下约束:列表使用的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限制为多个项目或字节,这意味着尚未过期的旧项目必须移动到文件
答案 0 :(得分:5)
根据上面的评论,您需要一种缓存机制。
.NET 4有这个内置版本(参见http://msdn.microsoft.com/en-us/library/system.runtime.caching.aspx) - 它带有可配置的缓存策略,您可以使用它来配置其他内容的到期...它甚至提供了一些事件,您可以将委托分配给在删除缓存条目之前调用,以进一步自定义此过程......
答案 1 :(得分:1)
您无法指定HashMap的最大容量。您需要在它周围实现一个包装器,在每次插入之后,检查是否已达到最大计数。
我不清楚这是否就是你所要求的。如果您有更多问题,请务必清楚说明,并在每个问题上使用问号。