jvbsl schrieb:
Du hast die Behauptung aufgestellt, dass LinQ performanter sei
*sein kann.
Ich hab nur gesagt dass ich Code habe, der mit Linq besser performt, nicht dass jeder Code mit Linq besser performt.
jvbsl schrieb:
Ich denke sonst ist das Ergebnis nicht ganz fair, da wenn ich das richtig gesehen habe der LinQ teil erst in Zeile 92 evaluated wird
Richtig. Wenn man das Query zu einer Liste forced ist es gleich schnell wie die For Methode. Aber da man im vorhinein nicht immer weiß, wie das Ergebnis einer Methode verwendet wird, ist es in diesem Fall sinnvoller es lazy zu machen, da somit nur das evaluiert wird, was auch benötigt wird. Vor allem wenn einer der Schritte länger dauert.
Dann hast du nämlich eine Methode die dir potentiell alle Ergebnisse liefert, allerdings auch noch gefiltert werden kann und nur die nötige Arbeit verrichtet.
z.B.:
Hier ist es weit sinnvoller Linq zu verwenden als eine for loop, denn die for loop müsste für den jeweiligen Filter angepasst werden, um nicht unnötige Arbeit zu verrichten.
C#-Quellcode
- static int SomeSlowOperation(int value)
- {
- return value * 2; // just pretend something really slow happens here
- }
- static IEnumerable<int> CalculateAll(IEnumerable<int> values)
- {
- return from value in values
- select SomeSlowOperation(value);
- }
- static void Main(string[] args)
- {
- var values = Enumerable.Range(1, 10000);
- var results = CalculateAll(values);
- foreach(var result in results.TakeWhile(result => result < 100))
- {
- Console.WriteLine(result);
- }
- Console.ReadLine();
- }
SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=
Weil einfach, einfach zu einfach ist!
Weil einfach, einfach zu einfach ist!