1

Je suis en train de paralléliser un code dorsal et d'essayer de ne pas casser les interfaces. Nous avons plusieurs méthodes qui retournent Dictionary et en interne, j'utilise ConcurrentDictionary pour effectuer des opérations parallèles sur.Obtention du dictionnaire <K,V> à partir de ConcurrentDictionary <K,V> dans .NET 4.0

Quelle est la meilleure façon de renvoyer le dictionnaire à partir de ceux-ci?

Cela se sent presque trop simple:

return myConcurrentDictionary.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); 

Je me sens comme si je manque quelque chose.

Répondre

4

Constructing the Dictionary<K,V> directly sera légèrement plus efficace que d'appeler ToDictionary. Le constructeur va pré-allouer le dictionnaire cible à la taille correcte et n'aura pas besoin de redimensionner à la volée au fur et à mesure.

return new Dictionary<K,V>(myConcurrentDictionary); 

Si votre ConcurrentDictionary<K,V> utilise une coutume IEqualityComparer<K> alors vous voudrez probablement pass that into the constructor too.

+0

Oh, je ne le savais pas. Bonne info! – Squirrelsama

+0

Cela fonctionnera-t-il si des éléments sont ajoutés ou supprimés du dictionnaire pendant la construction du nouveau dictionnaire? – supercat

+0

@supercact: Oui, ça va. * "L'énumérateur renvoyé par le dictionnaire est sûr à utiliser simultanément avec les lectures et les écritures dans le dictionnaire, mais il ne représente pas un instantané instantané du dictionnaire.Le contenu exposé par l'intermédiaire de l'énumérateur peut contenir des modifications apportées au dictionnaire après que 'GetEnumerator' ait été appelé." * http://msdn.microsoft.com/en-us/library/dd287131.aspx – LukeH

1

Non. C'est complètement parfait. Les séquences .NET sont sympa comme ça. : D

Questions connexes