向/从集合中添加/删除对象,快速异步,经常

时间:2017-02-06 21:38:41

标签: c# database asynchronous collections fifo

我有相对较快的数据流进入我的程序(4个大约25Hz的流)我必须存储每个输入并保留它,并在以后上传它。对象本身相对简单,只有字符串和双精度。

我想我会用数据库存储。我以前想过文件,但我认为数据库更好。无论哪种方式,如果你有这方面的建议,请随意分享,但它超出了这个问题的范围。

现在我的问题在于:如何正确地完成这项任务?

对象的快速流将被存储到一个集合中(我还不知道哪个),对于每个流分别,每隔一段时间(可能每个流约500个对象),我将保存他们在数据库中。

我担心这会导致竞争条件,因为我会在从集合中删除对象时写入集合。

此外,我认为我不需要订购该集合,因为数据是时间敏感的;每个数据流的每个对象都有一个时间戳。因此,只要将数据保存在数据库中,从集合中删除,并且流不会中断,我就会以“错误”的顺序保存数据并不重要。

基本上,这可能是一种典型的FIFO行为,但如果不那么容易,那么我应该没事。无论哪种方式,我都不确定如何在逻辑方面实现它。我有很多头疼,我宁愿做好准备。

我并不特别需要复制粘贴代码,如果可能的话,我正在寻找一个实际的答案。

  • 您推荐什么样的系列?
  • 我需要某种异步收集逻辑吗?
  • 我需要某种线程/锁定逻辑吗?
  • 是否有可以同时修改两端的集合?

我没有特别的指导方针,我很乐意接受建议。

编辑:此外,值得一提的是,如果有人想从文档中链接某些内容,我正在使用C#。

非常感谢您的时间,一如既往,非常感谢:)

1 个答案:

答案 0 :(得分:3)

您正在寻找队列(FIFO)。特别是ConcurrentQueue - 它将为您处理锁定。

或者,如此数据量较小的基本列表,只需lock即可阅读和书写。