Wann sollte ich verwenden, Z. B. concurrentdictionary und Wörterbuch?
Ich bin immer verwirrt, auf denen diese zu Holen. Wie ich es sehe nutze ich Dictionary
über List
wenn ich will, zwei Datentypen als Key
und Value
so kann ich ganz einfach einen Wert durch seine key
aber ich bin immer verwirrt, wenn ich verwenden sollte ConcurrentDictionary
oder Dictionary
?
Bevor Sie Weg gehen, mich nicht setzen viel Forschung zu diesem habe ich versucht, aber das scheint google noch nicht wirklich, hab alles auf Dictionary
vs ConcurrentDictionary
aber etwas auf den einzeln.
Habe ich einen Freund gebeten, dies vor, aber alles was Sie sagte ist: "verwenden Sie ConcurrentDictionary
wenn Sie Ihr Wörterbuch benutzen, eine Menge in code" und ich habe nicht wirklich wollen, zu belästigen, Ihnen zu erklären, es im größeren detail. Könnte jemand das bitte näher erläutern?
- So, nachdem ich mich durch die Informationen auf jedes dieser Objekte einzeln, wie hat sich das nicht beantworten Ihre Frage, wenn Sie sollten einen? Wenn Sie wissen, Wann Sie verwenden sollten, eine
Dictionary
und wenn Sie sollten nutzen einConcurrentDictionary
angesichts der Tatsache, dass Sie sagen, Sie haben bereits festgestellt, dass Informationen, dann wissen Sie, wenn Sie verwenden sollten, eine über der anderen. - Der name Art erklärt es sich von selbst. Verwenden Sie eine
ConcurrentDictionary
wenn Sie müssen den Gleichzeitigen Zugriff auf ein Wörterbuch. - verwenden Sie Z. B. concurrentdictionary, wenn Sie für den Zugriff auf das Wörterbuch über mehrere threads. Das ist es, was die ganze
System.Collections.Concurrent
- namespace ist für - Die Sache, zu suchen ist "thread safety".
- also sagen Sie, dass, wenn Sie wissen, was Sie bereits wusste, Sie würde nicht die Frage stellen. Aber Sie wissen das nicht, noch nicht, und so Fragen. (Lesen-zwei Definitionen, die nicht immer helfen, Sie kennen den Unterschied)
- Die unten aufgeführten Antworten sind falsch, indem Sie auf 'threads'.
Task
s sollte mitConcurrentDictionary
zu. - Nein, sage ich, dass, wenn Sie bereits wüssten, was Sie sagte, in der Frage, die Sie schon kannten, dann würden Sie wissen, dass die Antwort auf die Frage. Der leicht verfügbare Informationen auf jeder Art ist, wird die Unterschiede sehr deutlich erkennbar. Wenn es einige spezifische Quelle der Verwirrung nachdem ich mich durch die zwei dann würde es brauchen, um mehr als, "sagen Sie mir den Unterschied aus, denn ich konnte nicht die Mühe gemacht zu schauen" - eine Frage, legen Sie heraus, was Sie sahen, und warum die Unterschiede waren nicht erkennbar.
- ah ich sehe. Wir sehen aus Ihrer Argumentation, dass Sie falsch sind, denn die Frage, die gestellt wurde.
- Das ist eine falsche Argumentation. Dass Sie nicht wählen, Ihre Forschung oder sehen Sie sich die Unterschiede zwischen den beiden Typen bedeutet nicht, dass Sie das nicht konnte, nur dass die nicht. Man kann in der Tat eine Frage stellen, dass Sie die Antwort wissen, oder dass Sie könnte trivial beantwortet werden. Unter der Annahme, dass es unmöglich ist, eine Frage zu stellen, könnte man trivial die Antwort zu finden, ist eine falsche Annahme.
- Meine Vermutung ist, dass der Fragende vermutlich unabsichtlich herausgefiltert, die Worte, die Sie nicht verstehen (wie gleichzeitig). Daher müssen wir helfen, mit der Bedeutung dieser Worte. Nicht einfach sagen, verwenden Sie "gleichzeitige was Sie brauchen Parallelität", wie Scott sagte. Da dies eine sprachliche Binsenweisheit, dass ergibt sich aus den Regeln der englischen Grammatik. Müssen wir wohl erklären, was die gleichzeitige Mitteln, insbesondere im Zusammenhang mit der Programmierung.
- Eine einfache web-Suche auf, dass der Begriff der definition, wenn Sie nicht in der Tat das Wort verstehen. Obwohl, wenn Sie sagten, daß es das war, was Sie nicht verstehen, Sie würde die Frage zumindest besser als es jetzt ist, auch wenn Sie noch nicht die passende Frage, dass eine detaillierte Frage selbst ist leicht verfügbar mit einfachen Forschung. Aber der Punkt ist, wir können nicht einfach hier sitzen, versuchen zu erraten, was Sie tun und nicht verstehen. Sie müssen Fragen Sie eine speziellere Frage zu erklären, welche Aspekte dieser Entscheidung, die Sie nicht verstehen, daher meine ursprüngliche Frage.
- ja, ich Stimme zu und denke, dass wir es unterlassen sollten beantworten, bis die Frage klar ist, bis dahin müssen wir entdecken, was die Frage ist, kaufen um Klärung bitten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
"Verwenden, Z. B. concurrentdictionary wenn Sie Ihr Wörterbuch benutzen, eine Menge in code" ist eine Art von vagen Beratung. Ich tadele Sie nicht für die Verwirrung.
ConcurrentDictionary
ist primär für den Einsatz in einer Umgebung, wo würden Sie die Aktualisierung des Wörterbuches von mehreren threads (oder asynchrone Aufgaben). Sie können eine standard -Dictionary
ab, wie viel code, wie Sie möchten, wenn es von einem einzigen thread 😉Wenn man sich die Methoden auf ein Z. B. concurrentdictionary, werden Sie vor Ort einige interessante Methoden wie
TryAdd
,TryGetValue
,TryUpdate
, undTryRemove
.Betrachten Sie beispielsweise ein typisches Muster sehen Sie möglicherweise für die Arbeit mit einem normalen
Dictionary
Klasse.Dies ist ein Problem, dass zwischen überprüfen Sie, ob es enthält einen Schlüssel und ruft
Add
einem anderen thread nennen könnteAdd
mit derselbenid
. Wenn dieser thread ruftAdd
, es wird eine Ausnahme ausgelöst. Die MethodeTryAdd
Griffe, die für Sie, und gibt einen true/false-erzählen Sie, ob Sie ihn Hinzugefügt haben (oder ob dieser Schlüssel bereits im Wörterbuch).So, es sei denn, Sie arbeiten in einer multi-threaded-code-Abschnitt, können Sie wahrscheinlich verwenden Sie die standard -
Dictionary
Klasse. Dass gesagt wird, theoretisch könnten Sie sperren haben, um zu verhindern, dass der gleichzeitige Zugriff auf ein Wörterbuch;, die Frage ist schon-Adresse in "Wörterbuch locking vs. Z. B. concurrentdictionary".ConcurrentDictionary
, aber ich kann mir vorstellen, da würde es zumindest einigen Aufwand, je nachdem, wie das Wörterbuch verwendet wird, könnte ein Engpass. Wenn Sie möchten, vergleichen Sie die Quelle, um zu sehen, was passiert, schauen Sie sich die Quelle für das Z. B. concurrentdictionary.TryAddInternal() und Wörterbuch.Insert().async
Methoden mitawait
im inneren sollte ich verwendenConcurrentDictionary
es?Die größte Grund für die Verwendung
ConcurrentDictionary
über den normalenDictionary
ist thread-Sicherheit. Wenn Ihre Anwendung mehrere threads mit der gleichen Wörterbuch zur gleichen Zeit, müssen Sie die thread-sichereConcurrentDictionary
dies gilt insbesondere dann, wenn diese threads sind schriftlich oder Gebäude-Wörterbuch.ConcurrentDictionary
mit single-threaded-code?ConcurrentDictionary
ist nützlich, wenn Sie benötigen Zugriff auf ein Wörterbuch über mehrere threads (z.B. multithreading). VanilleDictionary
Objekte besitzen nicht diese Fähigkeit und sollte daher nur verwendet werden, in single-threaded Weise.ConcurrentDictionary
wäre eine gültige design-Wahl. Allerdings, wenn Sie nicht Vorhaben, dann sollten Sie vermeiden, weil es an der Struktur der Daten würde nicht am besten für Ihre Anforderungen