Optimieren Sie IEnumerable zur HashSet-Konvertierung in LINQ

8
%Vor%

Diese Funktion wird oft 1000 mal genannt und es gibt 5000 Studenten in der Ergebnismenge. Wie kann ich diese Funktion optimieren? Ich weiß, dass die Konvertierung von IEnumerable nach HashSet viele Gemeinkosten verursacht. ToHashSet ist meine Erweiterungsmethode. Diese Funktion ist zu langsam und essen viel Zeit.

    
abbas 28.06.2012, 13:58
quelle

2 Antworten

9

Zuerst müssen Sie die Hashset-Werte in Ihrer Dienstfunktion nicht aufzählen Sie könnten die Effizienz verbessern, indem Sie eine nette statische Erweiterungsklasse verwenden, die von @Jon

geschrieben wurde

Zeilenergebnis in hashset umwandeln

und ich denke, dass Sie den FirstOrDefault nicht überprüfen müssen, da die Erweiterung das neue Student-Objekt behandelt, das T gegeben wurde so könnten Sie auf sauberere und saubere Weise ändern.

%Vor%

Die andere Option ist, dass Sie IEnumerable in Ihren Konstruktor für HashSet übergeben können wie

%Vor%

Sie haben also nur eine Codezeile in Ihrer GetStudents-Funktion

    
Turbot 28.06.2012, 14:11
quelle
4

Führen Sie die Abfrage nicht zweimal pro Aufruf aus.

%Vor%

Ihr Zustand ist unnötig:

%Vor%
  

Ich weiß, dass die Konvertierung von Ienumerable nach Hasset viel bewirkt   von Gemeinkosten

Das ist Stier. Du hast nichts gemessen und täuschst dich selbst, den falschen Teil des Codes zu optimieren.

    
Amy B 28.06.2012 15:12
quelle