Okay,
zunächst mal Sorry für den geringen Informationsgehalt. Ich versuch mal ein bischen Licht ins dunkel zu bringen.
Die Funktion welche ich aktuell versuche zu optimieren gibt es eigentlich schon. Wir setzen eine Komponente in Delphi ein um auf einen Applikationsserver eines Drittherstellers zuzugreifen, der wiederrum auf eine
MSSQL geht.
Dort gibt es eine Funktion zum Feldwerte lesen. Der Aufruf funktioniert grob so:
Delphi-Quellcode:
ThirdPartyComponent.Select('Select Feldname From Tabelle');
ThirdPartyComponent.GetFieldvalue('Feldname');
Ich hab jetzt durch Zufall herausgefunden, dass der Aufruf des Herstellers sich einen Fuß ins Ohr schafft. zu dem Zeitpunkt wo ich den Feldwert aufrufen kann, liegt mir nämlich eigentlich schon das gesamte Ergebnis der ganzen Abfrage als 2 Dimensionales OleVariant Array vor. Beim Aufruf der GetFieldvalue Funktion wird der Wert nochmal auf der Applikationsschicht abgefragt, allerdings nicht in der
DB sondern nur in einem internen Cache. Also auch kein Vorteil zum Thema Datenaktualität.
Das Olevariant Array muss ich nun eben mit
Olevariant[Spaltennummer,Zeilennummer]
aufrufen.
Aufrufzeit für einen Feldwert mit 4181 Zeilen = 4310ms (Komponentenfunktion)
Aufrufzeit für einen Feldwert mit 4181 Zeilen = 1ms (eigene Funktion)
soweit ja schon mal subi
Werfe ich jetzt in die
SQL Abfrage noch ein 2. Feld rein dann wird aus der 1ms schon 50ms usw.
Das liegt halt daran, dass ich die Komponente gerne kapseln will um nicht den Index aufrufen zu müssen, sondern weiter den Feldwert benutzen kann. Welchen Index der Feldwert hat schreib ich mir also einmalig beim ersten aufruf in das Dictionary und kann dann später in meiner funktion mit der gleichen Sytax den Feldwert wieder mit Namen aufrufen. Das Suchen scheint aber eben mit jedem Eintrag im Dictionary entsprechend länger zu dauern. Das wollte ich gerne ein bisschen einbremsen
Ich hoffe damit wird klarer was ich versuche zu erreichen.