Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

ADO Feld-Abfragen Optimierung

Geschrieben von: Christian Koller
Kategorie: Optimierung

This printed page brought to you by AlphaSierraPapa

Viele Datenbankapplikationen, auch unter ASP, öffnen ein ADO Recordset, um dann auf einzelne Felder oder Feldwerte des Recordsets zuzugreifen. Wenn man das ganze Recordset in einer Schleife durchläuft, so wird oft ein Skript wie folgt benutzt (rs steht dabei für ein geöffnetes Recordset Objekt mit Daten):

...
While Not rs.EOF
   strName = rs("Name").Value
   strAdresse = rs("Adresse").Value
   strGebDat = rs("Geburtsdatum").Value
   ...
   rs.MoveNext
Wend
...

Analysieren wir kurz die Schleife: Während jedes Schleifendurchlaufs wird auf drei Felder (Name, Adresse, Geburtsdatum) zugegriffen. Dabei muß Visual Basic (oder VBScript) in jedem Durchlauf erst anhand des Feldnames ermitteln, welches Feld im Recordset nun gemeint ist. Das heißt, der Feldname wird gelesen, das zugehörige Feld im Recordset gesucht, und eine Referenz auf das Feld zurückgegeben. Dann wird mit Hilfe dieser Feldreferenz der Wert des Feldes (Value Eigenschaft, zugleich die Default Eigenschaft) ermittelt, sodaß dieser Wert zur Verarbeitung durch das Skript bereitsteht.

Wenn das Recordset nun sehr groß ist, so wird viel Rechenzeit damit vergeudet in jeder Schleife wieder die Feldreferenz anhand des Namens zu ermitteln. Ökonomischer und damit schneller ist es, die Feldreferenz nur einmal zu ermitteln und dann in jeder Schleife immer wieder diese Referenz zur Ermittlung des Feldwertes des jeweiligen Datensatzes (Record) heranzuziehen. Genau das tut das folgende Skript, es speichert die Referenz zu den Feldern in 3 Variablen (fldName, fldAdresse, fldGeburtsdatum) um dann diese gespeicherten Referenzen in jedem Durchlauf der While...Wend Schleife heranzuziehen:

...
Set fldName = rs("Name")
Set fldAdresse = rs("Adresse")
Set fldGeburtsdatum = rs("Geburtsdatum")
While Not rs.EOF
   strName = fldName.Value
   strAdresse = fldAdresse.Value
   fldGeburtsdatum = fldGebDat.Value
   ...
   rs.MoveNext
Wend
...

Dies bringt pro Durchlauf etwa eine Performancesteigerung von 20% (gemessen mit der gratis erhältlichen Profiling Komponente von AlphaSierraPapa).

Weiteres über Performance Steigerung im Zusammenhang mit Datenbankabfragen mittels ADO oder dem Recordset Objekt in Kürze bei ASPHeute.com in der Kategorie Datenbank.

This printed page brought to you by AlphaSierraPapa

Verwandte Artikel

Benutzerverwaltung leicht gemacht: Teil 1
http:/www.aspheute.com/artikel/20020429.htm
Highspeed-Abfragen einer SQL Server Datenbank
http:/www.aspheute.com/artikel/20001013.htm

Links zu anderen Sites

Profiling Komponente
http://www.alphasierrapapa.com/IisDev/Components/Profiler/

 

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.