Каков наилучший способ перебора словаря с несколькими потоками? - PullRequest
2 голосов
/ 09 сентября 2011

РЕДАКТИРОВАТЬ Я ограничен .Net версии 2.0, поэтому я не думаю, что я могу использовать библиотеку параллельных задач в этом случае.

У меня есть словарь объектов.

Мне нужно перебрать их все и выполнить дорогой, но смущающий распараллеливание расчет для каждого элемента.

В настоящее время я использую один поток для перебора всего словаря.

Подход 1

Я играл с использованием пула потоков, чтобы разделить вычисления несколько потоков, но это приводит к вопросу о том, как передать это отдельные темы?

В настоящее время я преобразовываю коллекцию ключей в массив и передаю часть массива в отдельные потоки, чтобы они могли использовать ключ для поиска значения и выполнения вычисления.

Подход 2

В качестве альтернативы, я мог бы перебирать каждый ключ и отправлять поток в пул потоков к каждому элементу.

Второй подход медленнее.

Есть ли лучшая альтернатива?

Ответы [ 2 ]

15 голосов
/ 09 сентября 2011

Вы можете использовать параллельную библиотеку задач :

Parallel.ForEach(dictionary, keyValuePair => {...});
6 голосов
/ 09 сентября 2011

вы можете использовать этот подход (.NET 4)

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

      Parallel.ForEach(elements, (element) =>
                {
                    // USE element the way you need it
                }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...