Frage zu Dictionaries

13/08/2009 - 19:21 von Jens Duczmal | Report spam
Hm...bitte vorab um Entschuldigung, falls das Posting nun doppelt ist.
40tude meinte "no such article numer in group" und hat es mir als 1-Zeiler
ausgewiesen. Hier daher nochmal:



Guten Abend zusammen,

ich habe da ein paar ganz einfache Zeilen Quellcode
von denen ich mir eigentlich sicher bin, das die so gut sind.
Trotzdem würde ich das gerne nochmal von Euch verifizieren lassen.

Ich habe ein IEnumerable<Student> von Studenten (Daten.Studenten).
Und es soll am Bildschirm ausgegeben werden, wie viele Studenten
jeweils aus welchem Ort kommen.

Was Besseres als dies mit einem Dictionary zu lösen, viel mir nicht ein.

public void Iteration(){
Dictionary<String, int> result = new Dictionary<String, int>();
foreach (var s in Daten.Studenten) {
if (!result.ContainsKey(s.Ort))
result.Add(s.Ort, 1);
else
result[s.Ort]++;
}

foreach (var s in result)
Console.WriteLine(s.Key + " " + s.Value.ToString());
}


Der Grund für meine merkwürdige Frage ist folgender:

Ich arbeite im Rahmen einer Abschlusarbeit an einem Vergleich
zwischen normalen Iterationen und LINQ.

LINQ ist bekanntlich mind. um den Faktor 2 langsamer.
Bis auf dieses Beispiel. Hier ist LINQ etwa 2 mal schneller
und wenn ich ein SortedDictionary nehme, fàllt der Unterschied
noch weeeeit größer aus.

Das macht mich halt stutzig und daher vermute ich einen ganz
üblen Anfàngerfehler im Code oben. So recht mag ich aber nicht daran
glauben :)

Danke schonmal im voraus.
LG,
Jens
 

Lesen sie die antworten

#1 Frank Dzaebel
14/08/2009 - 06:46 | Warnen spam
Hallo Jens,

Ich habe ein IEnumerable<Student> von Studenten (Daten.Studenten).



Du solltest bei Performance-Dingen ganz genau
reproduzierbaren Quellcode angeben. Es fehlt zum Beispiel
"Daten". Bei diesen Performance-Fragen ist oft
entscheidend, ob nicht ein "Apfel-Birnen" Vergleich
vorliegt. Welcher mit welchem Code soll jetzt genau
verglichen werden? Es ist auch wichtig was und wie
man mißt:

[Improving .NET Application Performance and Scalability]
http://msdn.microsoft.com/en-us/lib...98530.aspx



Der Grund für meine merkwürdige Frage ist folgender:
Ich arbeite im Rahmen einer Abschlusarbeit an einem Vergleich
zwischen normalen Iterationen und LINQ.
LINQ ist bekanntlich mind. um den Faktor 2 langsamer.



Definiere genau *was* bzgl. wem langsamer ist.
Die Aussage ist so pauschal auf jeden Fall falsch.



Bis auf dieses Beispiel. Hier ist LINQ etwa 2 mal schneller
und wenn ich ein SortedDictionary nehme, fàllt der Unterschied
noch weeeeit größer aus.



Mit welchem Code vergleichst Du.
Du kannst Linq Code ja quasi debuggen, wenn
Du die implementierende Erweiterungs-Methode selber
schreibst und dort die Kopie der Original-Implementierung
einsetzt. (Ggf. über Reflector ausfindig machen).

Dass Abfragen aus sortierten Dictionaries schneller
sind als ohne Sortierung liegt ja auch auf der Hand:

[BinarySearch des dichtesten Elementes in C#]
http://dzaebel.net/BinarySearch_Nearest.htm


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen