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é?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top