0

我正在为多线程生产者消费者问题设计解决方案。

产品数量非常多(大约 100,000 个),因为消费者每小时运行一次。

有多个生产者线程和一个消费者线程。

消费者线程是一个每小时执行一次的任务。

消费者线程将过去一小时的数据保存到数据库中,对于当前一小时,它将其保留在产品集合中。

我开始使用blockingcollection和tasks .net 4 TPL编写解决方案,如以下 经典生产者消费者模式所述

我正在考虑更优化的生产和消费产品的方式,为此我认为不要检查每一行产品集合中的最后一小时,而是使用 ConcurrentDictionary,键为 Hour(DateTime)。

因此,我不想使用 Product 我想使用 ConcurrentDictionary>

我认为通过在 Hour(DateTime) 键上使用 ConcurrentDictionary,消费者可以轻松选择最后一小时的产品并将其保存到数据库中,而无需按小时过滤产品。

我想以下列方式使用 BlockingCollection,但似乎都不正确。

使用 BlockingCollection>> 似乎并不好,因为在其中只有一个条目本身就是字典。

使用 ConcurrentDictionary>> 似乎并没有提供 BlockingCollection 集合的优势,因为它不是由消费者/生产者直接访问的。

在这种情况下如何使用 BlockingCollection?我的方法正确吗?

编辑:此服务器需要非常高的负载,即每 30 秒接收 4 MB 的数据并处理它需要 50 倍以上的内存。它是一个预计运行数月的服务器。

4

0 回答 0