使用多个线程迭代Dictionary的最佳方法是什么?

时间:2011-09-08 21:16:28

标签: c# multithreading dictionary

编辑我只限于.Net版本2.0,所以我不相信在这种情况下我可以使用任务并行库。

我有一本对象词典。

我需要迭代所有这些并对每个元素执行昂贵但令人尴尬的可并行化计算。

目前我正在使用单个线程迭代整个字典。

方法1

  

我玩弄了一个线程池来分解计算结果   多个线程,但这导致了如何将其传递给的问题   单独的线程?

我目前将密钥集合转换为数组并将数组的一部分传递给单独的线程,以便他们可以使用密钥来查找值并执行计算。

方法2

  

或者,我可以迭代每个键并调度一个线程   每个元素的线程池。

第二种方法较慢。

有更好的选择吗?

2 个答案:

答案 0 :(得分:15)

您可以使用Task Parallel Library

Parallel.ForEach(dictionary, keyValuePair => {...});

答案 1 :(得分:6)

您可以使用此方法(.NET 4)

var elements = new ConcurrentDictionary<int, string>();

      Parallel.ForEach(elements, (element) =>
                {
                    // USE element the way you need it
                }