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
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
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.