LinQ2Objects Performance

21/08/2009 - 14:53 von Harald Bacik | Report spam
Hallo NG

Mal eine Frage zum Thema Performance bei LinQ
Folgender Code ist in etwa 3x so schnell (ca. 1 Sekunde benötigt dieser
Code)

For Each myCombination In Combination
For i As Integer = 0 To Beschichtungen.Count - 1
If
Beschichtungen.Item(i).Hst_Code_Schicht.ToLower.Trim = _
myCombination.Hst_Code_Schicht1.ToLower.Trim
Then

Beschichtungen.Item(i).Zeigen myCombination.Lieferbarkeit
End If
Next
Next

Im Gegensatz zu diesem LinQ Code. Der braucht in etwa 3-4 Sekunden
->Resultat ist das Selbe

For i As Integer = 0 To Beschichtungen.Count - 1

Dim zVariable As Integer = i
Dim fCombination = (From Query In Combination Where _
Query.Hst_Code_Schicht1.ToLower.Trim
= _

Beschichtungen.Item(zVariable).Hst_Code_Schicht.ToLower.Trim).FirstOrDef
ault
If Not fCombination Is Nothing Then
Beschichtungen.Item(i).Zeigen fCombination.Lieferbarkeit
End If
Next

Woran liegt das? - Weiß das jemand?
DANKE
 

Lesen sie die antworten

#1 Elmar Boye
22/08/2009 - 10:28 | Warnen spam
Hallo Harald,

Harald Bacik schrieb:
Mal eine Frage zum Thema Performance bei LinQ
Folgender Code ist in etwa 3x so schnell (ca. 1 Sekunde benötigt dieser
Code)



da die Datengrundlage nicht bekannt ist muß man da viel raten.
(etwas was mich auch von der Beantwortung anderer Fragen abgehalten hat)

Grundsàtzlich ungünstig ist zum einen der stàndige Auruf von
.ToLower().Trim(). Du solltest da eher darauf achten, dass
Deine Daten ohne anhàngende Leerzeichen gespeichert werden,
damit wird das Trim überflüssig.
Und ToLower sollte ebenfalls unnötig sein, solange Du eine
Case-Insensitive Sortierung bei der Datenbank bzw. der
Spalte verwendest.

For Each myCombination In Combination
For i As Integer = 0 To Beschichtungen.Count - 1
If
Beschichtungen.Item(i).Hst_Code_Schicht.ToLower.Trim = _
myCombination.Hst_Code_Schicht1.ToLower.Trim
Then

Beschichtungen.Item(i).Zeigen > myCombination.Lieferbarkeit



Wer oder was ist MyCombination?

Next

Im Gegensatz zu diesem LinQ Code. Der braucht in etwa 3-4 Sekunden
->Resultat ist das Selbe

Beschichtungen.Item(zVariable).Hst_Code_Schicht.ToLower.Trim).FirstOrDef
ault



Hier rufst Du die Daten zeilenweise ab, was solange die Daten
nicht im Cache, jedesmal eine Datenbankabfrage erfordert.

Zudem wird jedesmal ein neuer Abfrageplan erzeugt werden,
was man durch compilierte Querys vermeiden kann:
<URL:http://msdn.microsoft.com/de-de/lib...r.aspx>

Gruß Elmar

Ähnliche fragen