ConcurrentDictionary vs Dictionary

Как сказано в MSDN

ConcurrentDictionary Class Представляет поточно-безопасную коллекцию пар ключ-значение, к которой могут обращаться несколько потоков одновременно.

Но, насколько мне известно, классы System.Collections.Concurrent предназначены для PLINQ.

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

Могу ли я безопасно заменить Dictionary на ConcurrentDictionary в моем случае? увеличится ли производительность после замены?

Здесь в Части 5 Джозеф Альбахари упомянул, что он разработан для параллельного программирования

  • Параллельные коллекции настроены для параллельного программирования. Обычные коллекции превосходят их по производительности во всех сценариях, кроме очень параллельных.
  • Поточно-ориентированная коллекция не гарантирует, что использующий ее код будет поточно-ориентированным.
  • Если вы перечисляете параллельную коллекцию, пока другой поток модифицирует это исключение не создается. Вместо этого вы получаете смесь старого и нового контента.
  • Не существует параллельной версии List.
  • Параллельные классы стека, очереди и пакета внутренне реализованы с помощью связанных списков. Это делает их менее эффективными с точки зрения памяти, чем классы не совпадающих классов Stack и Queue, но лучше для одновременного доступа, потому что связанные списки подходят для реализации без блокировки или с низким уровнем блокировки. (Это связано с тем, что для вставки узла в связанный список требуется обновить всего пару ссылок, а для вставки элемента в структуру, подобную списку, может потребоваться перемещение тысяч существующих элементов.)

27
задан mclark1129 29 April 2013 в 18:46
поделиться