Comment devrais-je conserver 2 dictionnaires simultanés en synchronisation?
-
11-12-2019 - |
Question
J'aime l'opération sans verrouillage du ConcurrentDrictionary et utilisez-le dansDeux objets:
ConcurrentDictionary<datetime,myObj> myIndexByDate
ConcurrentDictionary<myObjSummary, ConcurrentDictionary<int, myObj> myObjectSummary Index
Ces deux objets doivent rester en synchronisation.Est le seul moyen de faire cela est d'utiliser une serrure, évitant ainsi tous les avantages du dictionnaire simultané?
La solution
Je créerais une classe personnalisée avec 2 dictionnaires et utilisez un verrou uniquement sur les méthodes susceptibles de changer le dictionnaire (Ajouter, Supprimer).
Vous ne perdez pas les avantages du dictionnaire simultané lorsque cette méthode nécessite beaucoup moins de code que ce que vous devriez faire en utilisant un dictionnaire normal.
Autres conseils
Concurrentdictionnaire n'est que "Thread-Safe" sur les opérations sur une instance particulière.par exemple.tandis qu'un appel concurrentdictionary.YAjouter () est invoqué, aucun autre thread ne peut modifier la collection ...
Cela ne signifie pas que lorsque vous obtenez une valeur d'un dictionnaire et l'ajoutez à un autre dictionnaire que la valeur existe toujours dans le dictionnaire d'origine pendant que vous l'ajoutez à la seconde.
Vous avez probablement un invariant qui détaille que vous déplacez une valeur d'un dictionnaire à l'autre, aucune valeur dans le dictionnaire d'origine ne peut être supprimée (ou au moins cette valeur , mais c'estun peu plus difficile à garantir avec ConnCurrentChicticaire.