AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SDAC Select unter XE3 sehr langsam
Thema durchsuchen
Ansicht
Themen-Optionen

SDAC Select unter XE3 sehr langsam

Offene Frage von "Bernhard Geyer"
Ein Thema von OlliWW · begonnen am 25. Mär 2013 · letzter Beitrag vom 26. Mär 2013
Antwort Antwort
OlliWW

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

SDAC Select unter XE3 sehr langsam

  Alt 25. Mär 2013, 21: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
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.213 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: SDAC Select unter XE3 sehr langsam

  Alt 25. Mär 2013, 22:53
Von welchen Feldtyp sind die String-Felder? varchar oder nvarchar? Der MS-SQL-Server hatte (hat?) einen Fehler das bei Wandlung von AnsiString -> Widestring sehr viel Zeit verloren geht. Unter D2007 wurde u.U. noch mit Ansistrings (bzw. varchars) auf varchar-Felder zugegriffen. Bei XE3 wird hier mit Widestrings (bzw. nvarchar) auf varchar-Felder zugegriffen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#3

AW: SDAC Select unter XE3 sehr langsam

  Alt 25. Mär 2013, 23:36
Hallo,

Danke für die schnelle Antwort.

Die Felder sind alle Varchars im SQL 2005.

Ich habe auch versucht nur mit AnsiString lesend darauf zu zu greifen:
Delphi-Quellcode:
sField2: AnsiString;
.......
object.rec_sField2 := MSSQL1.FieldByName('FIELD2').AsAnsiString;
Das hat jedenfalls keine Besserung gebracht. Gibt es da irgendwas, was ich machen kann? Das ist ein sehr großes Projekt und dieses Beispiel mit 9000 Reihen ist eher ein kleines Beispiel, es gibt viele Stelle die mit XE3 nun so langsam sind, dass ich es keinem Kunden zumuten möchte mit einer XE3 Version meiner Software zu arbeiten. Ich möchte aber lieber gestern als heute von Delphi 2007 weg, da es nun wirklich nicht mehr zeitgemäß ist.

Würden andere Komponenten Besserung bringen? Muss ich die Tabellen konvertieren? Gibt es Einstellungen in SDAC?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.213 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: SDAC Select unter XE3 sehr langsam

  Alt 26. Mär 2013, 07:19
Kannst du Testweise mal ein Datenbank mit nvarchars aufbauen?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: SDAC Select unter XE3 sehr langsam

  Alt 26. Mär 2013, 07:56
Das gehört wohl dazu http://qc.embarcadero.com/wc/qcmain.aspx?d=111942
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
OlliWW

Registriert seit: 31. Aug 2011
159 Beiträge
 
#6

AW: SDAC Select unter XE3 sehr langsam

  Alt 26. Mär 2013, 09:54
Hallo,

Vielen Dank für die Antworten.

Das denke ich eher nicht, da es hier wirklich nur um das Auslesen von Feldern per SDAC geht, wenn ich den o.g. Code umbaue und feste Werte zuweise:
object.rec_field2 = 'Hallo';
dann funktioniert es einwandfrei.
Wenn ich nur Integer-Felder lese mit SDAC funktioniert es mit der gleichen Tabelle auch einwandfrei. Es liegt offenbar nicht nur Varchar-Feldern / String Variablen. Das Problem bestand ebenfalls auch schon vor XE3 Update 1.

Zitat:
Kannst du Testweise mal ein Datenbank mit nvarchars aufbauen?
Das habe ich gemacht. Ich habe meine Varchar-Felder einfach mit Alter Table in NVarchars verwandelt und siehe da: Es hat in der Tat die Geschwindigkeit zum positiven hin verändert, jedoch ist es trotzdem noch nicht auf dem Stand von Delphi 2007.
Ich bin mir auch nicht ganz sicher, was es für Auswirkungen hätte alle Felder in NVarchars zu ändern. Es sind mehrere 100 Tabellen mit tausenden Varchar Feldern. Allein der zusätzliche Speicherplatz der dadurch belegt werden würde, wäre m.E. nach nicht unerheblich. Ich dachte eigentlich mit XE3 wird endlich alles mal "besser" aber von Tag zu Tag kommt immer wieder der Gedanke hoch, dass ich wohl besser bei Delphi 2007 bleiben sollte
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz