Как сказано в MSDN
ConcurrentDictionary
Class Представляет поточно-безопасную коллекцию пар ключ-значение, к которой могут обращаться несколько потоков одновременно.
Но, насколько мне известно, классы System.Collections.Concurrent
предназначены для PLINQ.
У меня есть Dictionary
, который сохраняет подключенных клиентов в сервер, и я делаю его потокобезопасным, блокируя объект, когда у меня есть к нему доступ.
Могу ли я безопасно заменить Dictionary
на ConcurrentDictionary
в моем случае? увеличится ли производительность после замены?
Здесь в Части 5 Джозеф Альбахари упомянул, что он разработан для параллельного программирования
- Параллельные коллекции настроены для параллельного программирования. Обычные коллекции превосходят их по производительности во всех сценариях, кроме очень параллельных.
- Поточно-ориентированная коллекция не гарантирует, что использующий ее код будет поточно-ориентированным.
- Если вы перечисляете параллельную коллекцию, пока другой поток модифицирует это исключение не создается. Вместо этого вы получаете смесь старого и нового контента.
- Не существует параллельной версии List.
- Параллельные классы стека, очереди и пакета внутренне реализованы с помощью связанных списков. Это делает их менее эффективными с точки зрения памяти, чем классы не совпадающих классов Stack и Queue, но лучше для одновременного доступа, потому что связанные списки подходят для реализации без блокировки или с низким уровнем блокировки. (Это связано с тем, что для вставки узла в связанный список требуется обновить всего пару ссылок, а для вставки элемента в структуру, подобную списку, может потребоваться перемещение тысяч существующих элементов.)
задан mclark1129 29 April 2013 в 18:46
поделиться