猿问

是否有“简便的方法”创建队列,在一定的时间后将iten出队?

我在这里有一个小问题,我需要一些帮助。

我的代码是在网页上进行无穷大搜索的模式,只要发现新内容,就会将其写入文件中。

但是,有时,我要收集的信息已经在文件中,但是没有更新,并且我不想在文件中重复输入。

因此,我只创建了一个字符串列表,在其中添加了每个条目,并且每次代码找到要查找的内容时,它都会在写入文件之前检查字符串是否已经在该列表中。

您可以清楚地看到为什么这不是一个好主意...由于它运行的是24/7,因此此列表将不断扩大。但是有一个问题!我100%确保如果15分钟过去了,我要查找的信息将永远不会重复。

因此,我真正想要的是消除此列表中的项目15分钟。我只是想不出简单和/或优雅的方法来做到这一点。或者,我不知道是否有某些数据结构或库可以为我解决这个问题。

这就是为什么我要在这里问:创建某种“定时列表”的最佳解决方案是什么,在迭代结束时,在那里存在一会儿的项目会被删除吗?


慕码人2483693
浏览 138回答 3
3回答

当年话下

您是否尝试过.NET的内置MemoryCache?您可以设置一个包含绝对超时的缓存策略,我认为这是您想要的。

猛跑小猪

您将需要运行一些会定期修剪列表的内容。我过去所做的是:使用ConcurrentBag<Tuple<DateTime, T>>代替List<T>使用Tuples袋,存储对象及其添加时间:&nbsp;theBag.Add(Tuple.Create(DateTime.Now, myObject));运行一个辅助线程,该线程定期枚举bag,并删除所有“过期”的条目。这是一种比较活跃的方法,但是非常简单。但是,由于您现在正在使用两个线程,因此必须小心不要死锁。那就是为什么我使用类似的东西ConcurrentBag。Concurrent您还可以查看其他收藏集。您提到了一个队列,因此您可以尝试ConcurrentQueue像其他人建议的那样,快看一下缓存库并权衡一下您的选择。完整的缓存库可能会过大。
随时随地看视频慕课网APP
我要回答