如何在此方案中有效地使用BlockingCollection

时间:2013-06-13 17:41:58

标签: c# .net design-patterns producer-consumer

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

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

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

Consumer thread是一个每小时执行一次的任务。

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

我开始编写解决方案,如下文所述 classic producer consumer pattern using blockingcollection and tasks .net 4 TPL

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

因此,我不想使用产品,而是想使用ConcurrentDictionary>

之类的东西

我认为通过在Hour(DateTime)Key上使用ConcurrentDictionary,Consumer可以轻松选择最后一小时的产品并将其保存到数据库,而不会有按小时过滤产品的负担。

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

使用BlockingCollection>>看起来并不好,因为里面只有一个条目本身就是字典。

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

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

编辑: 该服务器负载非常高,即每30秒接收4 MB数据并处理它需要50倍的内存。它的服务器有望运行数月。

0 个答案:

没有答案