我有两个词典列表。我将每个线程查询一个用户,最多总共50个用户/线程。
第一个列表" users",每个线程只包含一个条目。 第二个列表" items",每个线程可能包含数千个条目(300是一个很好的平均值)。
目前,我在一个线程中依次查询用户:首先,收集一个用户的数据(这是同步实现的,包括~100ms的普通等待),然后用户将被添加到"用户",然后每个项目将被处理,一次一个,并添加到"项目" (处理1000件物品需要大约十几毫秒)。
在订购清单时,我根本不需要保留任何订单。
我现在想到如下:
但是在我这样做之前,我想问你这是否是最好的方法,或者你是否能想到更好的解决方案。在待并行化的部分中,我不会在任何一个列表上做任何事情,而是添加项目。
答案 0 :(得分:2)
根据这篇Thread-Safe Collections文章,System.Collections.Concurrent
命名空间(包括ConcurrentBag
)中的任何集合都应该适合您的多线程需求。
我可以从经验中说,在简单的lock
(在Dictionary
命名空间中)使用System.Collections.Generic
可以很好地处理大型内存中的仅添加集合。在生产中,它经常持有数百万件没有问题的物品,即使是通过定期过程来旋转和移除过期的#34;项目
如此底线,你不应该为这些项目建立50个单独的列表,然后再将它们连接起来。但是,当然,这种方法可能也会很好。它可能只是归结为你个人认为最方便的。