Hat die Länge der Schlüssel beeinflussen Wörterbuch-Leistung?
Verwende ich ein Wörterbuch in einem .NET-Projekt zu speichern eine große Anzahl von Objekten. Daher entschied ich mich für einen GUID-string als Schlüssel, um sicherzustellen, dass eindeutige Schlüssel für jedes Objekt.
Macht einen großen Schlüssel wie eine GUID (oder auch größeren) verringern Sie die Leistung eines Wörterbuchs, z.B. für das abrufen eines Objekts über seinen Schlüssel?
Dank,
Andrej
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde empfehlen, mit einer tatsächlichen
Guid
eher als die string-Darstellung derGuid
. Ja, beim vergleichen von strings die Länge wirkt sich auf die Anzahl der Operationen erforderlich, da es zu vergleichen die Zeichenfolgen Zeichen für Zeichen (auf ein minimum reduzieren; dies ist abgesehen von speziellen Optionen wieIgnoreCase
). Die tatsächlicheGuid
geben Sie nur 16 bytes zu vergleichen, eher als das minimum von 32 in derstring
.Dass gesagt wird, sind Sie sehr wahrscheinlich nicht gehen, um keine Unterschiede feststellen...die vorzeitige Optimierung und all das. Ich würde einfach die
Guid
key seit das ist, was die Daten ist.Die tatsächliche Größe eines Objekts mit Bezug auf das empfangen von Werten ist irrelevant. Die Geschwindigkeit von lookup-Werten ist viel mehr abhängig von der Geschwindigkeit zwei Methoden, die auf die übergebene
IEqualityComparer<T>
InstanzBEARBEITEN
Viele Menschen verwenden Zeichenfolge als Rechtfertigung für die Aussage, dass die größere Größe des Objekts verringert die lookup-Leistung. Dies muss mit einem Körnchen Salz, aus mehreren Gründen.
IEqualityComparer<String>
in der Weise, dass die string-Länge war irrelevant.StringComparer.*IgnoreCase
noch gehen Zeichen für Zeichen, bis es keine übereinstimmung findet, natürlich).IEqualityComparer<T>
(fürstring
oder irgendetwas anderes) ist O(1). Das ist aber,IEqualityComparer<T>
Implementierungen (mehr als 1). Und in mindestens einem der Fälle war es eine gute Idee und passen zum Szenario. Nur weil es unwahrscheinlich ist, bedeutet nicht, dass Sie nicht darauf stoßen.Ja und Nein. Größere strings erhöhen die Speicher Größe eines Wörterbuchs. Und größere Größen meine etwas längere Zeiten zum berechnen von hash-Größen.
Aber sich Gedanken über diese Dinge ist wahrscheinlich eine vorzeitige Optimierung. Während es wird langsamer, es ist etwas, das Sie wahrscheinlich tatsächlich feststellen.
Anscheinend nicht. Hier ist ein guter test: Dictionary String Key Test
Habe ich eine schnelle Google-Suche und fand diesen Artikel.
http://dotnetperls.com/dictionary-string-key
Er bestätigt, dass in der Regel kürzer Tasten besser sind als die längeren.
sehen Leistung - mit-Guid-Objekt oder Guid-Zeichenfolge als Schlüssel für eine ähnliche Frage. Sie konnte es testen mit einem alternativen Schlüssel.