Frage

Sind Enum Typen schneller / effizienter als string Typen, wenn sie als Dictionary-Schlüssel verwendet?

IDictionary<string,object> or IDictionary<enum,object>

Wie in der Tat, den Datentyp am besten geeignet als Wörterbuch Schlüssel ist, und warum?

Beachten Sie Folgendes: Hinweis: Nur 5 Eigenschaften der Einfachheit halber

struct MyKeys
{
   public string Incomplete = "IN"; 
   public string Submitted = "SU"; 
   public string Processing="PR"; 
   public string Completed = "CO"; 
   public string Closed = "CL";   
}

und

enum MyKeys
{
   Incomplete, 
   Submitted, 
   Processing, 
   Completed, 
   Closed
}

Welche der oben wird besser, wenn als Schlüssel in einem Wörterbuch verwendet!

War es hilfreich?

Lösung

Gewiß ist die enum Version ist besser (wenn beide anwendbar sind und Sinn machen, natürlich). Nicht nur für die Leistung (es kann besser oder schlechter, sehen Rashack ist sehr guten Kommentar) , wie es die Kompilierung und Ergebnisse in saubereren Code überprüft wird.

Sie können das comparer Problem umgehen, indem sie Dictionary<int, object> mit und enum Schlüsseln zum ints Gießen oder einen benutzerdefinierten comparer angeben.

Andere Tipps

Ich glaube, Sie durch die Konzentration auf Richtigkeit beginnen soll. Das ist viel wichtiger als die minimale Differenz zwischen dem kleineren Leistungsunterschiede, die in Ihrem Programm auftreten können. In diesem Fall habe ich auf die richtige Darstellung Ihrer Typen konzentrieren würde (Enum erscheint am besten zu sein). Dann später auf Ihr Anwendungsprofil und wenn es ein Problem ist, dann und nur dann sollten Sie es zu beheben.

Code macht schneller später im Prozess ist in der Regel ein geradlinig Prozess. Nehmen Sie den Link, der zur Verfügung gestellt skolima. Wenn Sie Aufzählungs gewählt hätte, wäre es gewesen, ein Potenzial Performance-Problem in Ihrer Anwendung ein etwa 10 Minuten fix zu entfernen. Ich möchte hier das Wort Potential betonen. Das war definitiv ein Problem für NHibernate aber, ob es nicht ein Problem für Ihr Programm würde allein durch die Verwendungen bestimmt werden würde.

Auf der anderen Seite, so dass Code korrektere später im Prozess neigt dazu, schwieriger zu sein. In einem ausreichend großen Problem werden Sie feststellen, dass die Menschen auf den Nebenwirkungen des bisherigen schlechten Verhaltens unter Abhängigkeiten starten. Dies kann, ohne brechen andere Komponenten herausfordernd macht Code zu korrigieren.

Enum können Sie sauberer und schönen Code erhalten, aber denken Sie daran einen benutzerdefinierten Vergleich zur Verfügung zu stellen, wenn Sie mit der Leistung angeht: http://ayende.com/Blog/archive/2009/02/21/dictionaryltenumtgt-puzzler.aspx .

Kann nicht gelten, aber ...

Beachten Sie, dass Aufzählungen sind Konstanten die Umgruppierung aller Baugruppen, die verursachen können Referenz die enum, wenn es geändert wird. (Das heißt die Konstante einprogrammiert an alle Baugruppen zur Kompilierzeit in denen es verwenden).

Ich würde vermuten, dass die Enum-Version ist schneller. Unter der Haube verweist das Wörterbuch alles von Hash-Code. Meine Vermutung ist, dass es langsamer ist der Hash-Code für eine Zeichenfolge zu generieren. Dies ist jedoch wahrscheinlich vernachlässigbar langsamer, und ist sicherlich schneller als alles, was wie ein String vergleichen. Ich stimme mit den anderen Plakaten, der sagte, dass eine Enumeration ist sauberer.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top