59 votes

Quand dois-je utiliser ConcurrentDictionary et Dictionary ?

Je suis toujours confus sur lequel choisir. Comme je le vois-je utiliser Dictionary sur List si je veux deux types de données comme un Key et Value donc je peux facilement trouver une valeur par ses key mais je suis toujours confus si je devrais utiliser un ConcurrentDictionary ou Dictionary?

Avant de vous rendre à moi de n'avoir pas fait beaucoup de recherches dans ce que j'ai essayé, mais il semble que google n'a pas vraiment eu quoi que ce soit sur Dictionary vs ConcurrentDictionary mais il a quelque chose sur chacun d'eux individuellement.

J'ai demandé à un ami de cela avant, mais tout ce qu'ils ont dit est: "utiliser ConcurrentDictionary si vous utilisez votre dictionnaire beaucoup dans le code", et je n'ai pas vraiment envie de les harceler à l'expliquant plus en détail. Quelqu'un pourrait-ce possible?

85voto

Jeff Bridgman Points 2545

"L'utilisation ConcurrentDictionary si vous utilisez votre dictionnaire de beaucoup de code" est une sorte de vague des conseils. Je ne vous blâme pas pour la confusion.

ConcurrentDictionary est primordiale pour une utilisation dans un environnement où vous seriez mise à jour du dictionnaire à partir de plusieurs threads (ou asynchrone des tâches). Vous pouvez utiliser une norme Dictionary de autant de code que vous aimez si c'est à partir d'un seul thread ;)

Si vous regardez les méthodes sur un ConcurrentDictionary, vous pourrez apercevoir quelques méthodes intéressantes comme TryAdd, TryGetValue, TryUpdate, et TryRemove.

Par exemple, considérons un modèle typique que vous pourriez voir pour travail normal, Dictionary classe.

// There are better ways to do this... but we need an example ;)
if (!dictionary.ContainsKey(id))
    dictionary.Add(id, value);

Cela a un problème en ce qu'entre la vérification pour savoir si elle contient une clé et appelant Add un thread différent pourrait appeler Add même id. Lorsque ce thread appelle Add, il va lever une exception. La méthode TryAdd des poignées pour vous et sera de retour le vrai/faux de vous dire si il ajouté ça (ou si cette clé était déjà dans le dictionnaire).

Donc, sauf si vous travaillez dans un environnement multi-thread section de code, vous pouvez probablement juste de l'utilisation de la norme Dictionary classe. Cela étant dit, vous pourrait théoriquement avoir un dispositif de verrouillage pour empêcher l'accès simultané à un dictionnaire; que la question est déjà de l'adresse dans le "Dictionnaire de verrouillage vs ConcurrentDictionary".

5voto

Andrew Points 944

La plus grande raison d'utiliser au-dessus de la normale est la sécurité du fil. Si votre application obtiendra plusieurs threads en utilisant le même dictionnaire en même temps, vous avez besoin du thread-safe `` , cela est particulièrement vrai lorsque ces threads sont l'écriture ou la construction du dictionnaire.

5voto

Woody1193 Points 2181

est utile lorsque vous devez accéder à un dictionnaire à travers plusieurs threads (c.-à-d. multithreading). Les objets à la vanille ne possèdent pas cette capacité et ne doivent donc être utilisés que d'une manière à fil unique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X