Einzelnen Beitrag anzeigen

OlliWW

Registriert seit: 31. Aug 2011
153 Beiträge
 
#1

SDAC Select unter XE3 sehr langsam

  Alt 25. Mär 2013, 20:29
Datenbank: MsSQL • Version: 2005 • Zugriff über: SDAC
Hallo Zusammen,

Ich habe ein großes Software Projekt, das Datenbanken (MsSQL) benutzt. Zum Lesen und Schreiben der Daten nutze ich die SDAC Komponenten. Im Moment läuft das Projekt noch auf Delphi 2007 und ich bin gerade dabei es auf XE3 zu mirgrieren. Bei den Select-Abfragen via SDAC Pro (6.6.12) und XE3 ist mir aufgefallen, dass die Abfragen wesentlich länger dauern als unter Delphi 2007, obwohl der Code exakt der gleiche ist.

Mit ein bisschen Debugging habe ich rausfinden können, dass die Zeit beim Auslesen der einzelnen Felder verloren geht, hier ein Beispiel (Die Tabelle "Tabelle" enthält ca. 9000 Datensätze):

Delphi-Quellcode:
MSSQL1.SQL.Text := 'SELECT FIELD1, FIELD2, FIELD3, FIELD4 FROM TABELLE'
    MSSQL1.Open;
    while not MSSQL1.Eof do
    begin
      object := TMyDataObject.Create;
      object.rec_iField1 := MSSQL1.FieldByName('FIELD1').AsInteger;
      object.rec_sField2 := MSSQL1.FieldByName('FIELD2').AsString;
      object.rec_sField3 := MSSQL1.FieldByName('FIELD3').AsString;
      object.rec_sField4 := MSSQL1.FieldByName('FIELD4').AsString;
      List.Add(object);
      MSSQL1.Next;
    end; //while
MSSQL1 ist das TMSQuerry von SDAC.

Das "Open" läuft unter beiden Delphi Versionen normal schnell. Jedoch sämtliche Zuweisungen die mit "AsString" ausgelesen werden, laufen wesentlich langsamer unter XE3.
Zum Vergleich habe ich aus der Tabelle nur Zahl-Felder auslesen lassen, die man mit AsInteger auslesen lassen kann. Dort ist die Abfrage sehr performant. Die Zeitverluste treten demnach nur auf, wenn man versucht Strings per SDAC aus einer MsSQL Datenbank auszulesen. Ich habe die leise Vermutung, dass es eventuell an Unicode liegen könnte. Und so habe ich auch mal "AsAnsiString" versucht. Aber auch diese Abfragen waren nicht schneller.

Hat jemand eine Idee wie ich SDAC unter XE3 genau so performant betreiten kann wie unter Delphi 2007? Diese "kleine" Tatsache hindert mich momentan daran ein sehr großes Softwareprojekt unter XE3 weiter zu entwickeln.
  Mit Zitat antworten Zitat