2015-05-07 2 views
9

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

MSDN от страницы имеет следующий комментарий в своем примере коде:

Чем выше concurrencyLevel, тем выше теоретическое количество операций, которые могут быть выполнены параллельно на ConcurrentDictionary. Тем не менее, глобальные операции, такие как изменение размера словаря, занимают больше времени при повышении уровня параллелизма.

Это лучшее, что я мог найти, что объясняет, что означает concurrencyLevel, и все же он все еще очень расплывчатый.

ответ

10

Самое главное понять, что даже если у вас есть более параллельный доступ, чем concurrencyLevel, операции по-прежнему будут потокобезопасными. То есть установка concurrencyLevel - это вопрос производительности, а не корректности.

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

Профилирование вашего приложения - действительно единственный способ определить оптимальный concurrencyLevel. Тем не менее, установка его на ожидаемое количество рабочих потоков - хороший старт.

+0

Соглашаться на профилирующую часть. Это единственный способ рассказать. –

+0

Можете ли вы объяснить, какие инструменты вы можете использовать для профилирования этого (например, VS Concurrency Visualizer). Кроме того, в частности, что мне нужно искать во время профилирования, которое указывает мне, что я должен увеличить/изменить параметр concurrencyLevel? –

Смежные вопросы