У меня есть словарь, который я хотел бы изменить его значения в цикле foreach, однако, поскольку мое приложение имеет решающее значение для времени, я пытаюсь избегайте всех ненужных накладных расходов на блокировку.Является ли безопасным для записей словаря r/w в Parallel.ForEach в C#
Является ли маркированная команда безопасной? то есть читать/записывать разные пары ключ-значение словаря без блокировки.
Примечание 1: Я знаю о пространстве имен совпадающих коллекций и всех его великолепных коллекций. Также я знаю, что я могу просто выделить выделенную команду, чтобы обеспечить ее безопасность. Как указано выше, моя цель избегает ненужных накладных расходов в максимально возможной степени.
Примечание 2: Вопрос такой же вопрос at this link. В этом вопросе элементы контейнера изменяются внутри цикла Parallel.ForEach
. Принимая во внимание, что здесь мы не изменяем пары ключ-значение, поэтому контейнер не поврежден, изменяются только данные, указывающие. Это отличает его от вышеупомянутого вопроса.
Update
- Этот код работает отлично, без блокировки, но я должен быть уверенным.
- Eventough
ConcurrentDictionary
добавит наименее возможные накладные расходы, я бы хотел избежать этого, если это безопасно.
Что вы пробовали? Что работает и что не работает? Вы измеряли какие-либо проблемы с производительностью при использовании ConcurrentDictionary? Операция добавления должна быть довольно быстрой и не проблема, если задача «манипулировать списком» занимает некоторое время. –
Вероятный дубликат http://stackoverflow.com/questions/5605422/is-this-use-of-parallel-foreach-thread -safe –
попробуйте добавить 1000 строк в loopData и посмотреть, правильно ли он передает результаты. –