c# – 带有可过期项目的HashTable

我想实现一个HashTable(或mabybe一个HashSet或Dictionary),它有一个独特的成员,会在一段时间后过期.例如:

// Items expire automatically after 10 seconds (Expiration period = 10 sec)
bool result = false;
// Starting from second 0
result = MyHashSet.Add("Bob");   // second 0 => true
result = MyHashSet.Add("Alice"); // second 5 => true
result = MyHashSet.Add("Bob");   // second 8 => false (item already exist)
result = MyHashSet.Add("Bob");   // second 12 => true (Bob has expired)

如何以最低的成本以线程安全的方式做到这一点?

您可以创建自己的哈希表,其中每个项目包含创建时间和时间跨度. 在您尝试返回值的索引器中,如果项的生命周期已过期,则返回null.并删除该项目.从表中删除项目的后台线程将无法确保您不会在没有此项的情况下返回过期项目.然后你可以创建一个执行此操作的线程,只是为了最大程度地删除过期的项目,以便在很多项目永远不会被访问时最大限度地减少内存消耗.
相关文章
相关标签/搜索