Вопрос

Мне нравится функция без блокировки работы concurrentdictionary и используйте его вДва объекта:

 ConcurrentDictionary<datetime,myObj> myIndexByDate
 ConcurrentDictionary<myObjSummary, ConcurrentDictionary<int, myObj> myObjectSummary Index
.

Эти два объекта должны оставаться в синхронизации.Это единственный способ сделать это - использовать замок, что избегая всех преимуществ параллельного словаря?

Это было полезно?

Решение

Я бы создал пользовательский класс с 2 словарими и использовать блокировку только на методах, которые подвержены изменению словаря (Add, Delete).

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

Другие советы

ConcurrentDictionAry является только «безопасным потоком» на операциях на определенном экземпляре.напримерВ то время как вызывается вызов ConcurrentDictionary.truddd (), никакие другие темы не могут быть изменены коллекции ...

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top