我在这里有一个小问题,我需要一些帮助。我的代码是在网页上进行无穷大搜索的模式,只要发现新内容,就会将其写入文件中。但是,有时,我要收集的信息已经在文件中,但是没有更新,并且我不想在文件中重复输入。因此,我只创建了一个字符串列表,在其中添加了每个条目,并且每次代码找到要查找的内容时,它都会在写入文件之前检查字符串是否已经在该列表中。您可以清楚地看到为什么这不是一个好主意...由于它运行的是24/7,因此此列表将不断扩大。但是有一个问题!我100%确保如果15分钟过去了,我要查找的信息将永远不会重复。因此,我真正想要的是消除此列表中的项目15分钟。我只是想不出简单和/或优雅的方法来做到这一点。或者,我不知道是否有某些数据结构或库可以为我解决这个问题。这就是为什么我要在这里问:创建某种“定时列表”的最佳解决方案是什么,在迭代结束时,在那里存在一会儿的项目会被删除吗?
3 回答
猛跑小猪
TA贡献1858条经验 获得超8个赞
您将需要运行一些会定期修剪列表的内容。
我过去所做的是:
使用
ConcurrentBag<Tuple<DateTime, T>>
代替List<T>
使用Tuples袋,存储对象及其添加时间:
theBag.Add(Tuple.Create(DateTime.Now, myObject));
运行一个辅助线程,该线程定期枚举bag,并删除所有“过期”的条目。
这是一种比较活跃的方法,但是非常简单。但是,由于您现在正在使用两个线程,因此必须小心不要死锁。那就是为什么我使用类似的东西ConcurrentBag
。Concurrent
您还可以查看其他收藏集。您提到了一个队列,因此您可以尝试ConcurrentQueue
像其他人建议的那样,快看一下缓存库并权衡一下您的选择。完整的缓存库可能会过大。
- 3 回答
- 0 关注
- 137 浏览
添加回答
举报
0/150
提交
取消