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

cho*_*ida 2 c# multithreading dictionary

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

我有一本对象词典.

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

目前我正在使用单个线程来遍历整个字典.

方法1

我玩过使用线程池来分解多个线程上的计算但这导致了如何将其传递给单独的线程的问题?

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

方法2

或者,我可以迭代每个键并将线程池中的线程分派给每个元素.

第二种方法比较慢.

还有更好的选择吗?

Mar*_*ade 15

您可以使用任务并行库:

Parallel.ForEach(dictionary, keyValuePair => {...});
Run Code Online (Sandbox Code Playgroud)


Dav*_*ras 6

你可以使用这种方法(.NET 4)

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

      Parallel.ForEach(elements, (element) =>
                {
                    // USE element the way you need it
                }
Run Code Online (Sandbox Code Playgroud)

  • 它不应该需要ConcurrentDictionary,这个问题意味着只读访问. (2认同)