Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO langsam :-( (https://www.delphipraxis.net/192080-ado-langsam.html)

p80286 20. Mär 2017 16:25

AW: ADO langsam :-(
 
Wow, ich hab es auch einmal ausprobiert
a) Ausgabe in ein tMemo 70.000 pro Minute
b) Ausgabe in ein tStringgrid 20.000 pro Minute

Nachher:
a) tMemo 250.000 in 50 sec (davon 13 für das Denken der DB)
b) tStringgrid 250.00 65 sec.

Bei einem Verifikationslauf schwankte die Zeit um ca. 5 Sec.

Aber das ist mir jetzt auch egal.

Gruß
K-H

haentschman 20. Mär 2017 16:26

AW: ADO langsam :-(
 
Zitat:

beim Test mit einem umfangreichen Datensatz die Importzeit von 110 Sekunden auf 20 Sekunden verkürzt.
... das deckt sich mit anderen Aussagen, das die Zeit sich auf ca. 30% vom Vorwert einpendelt. :thumb:

Ich sags ja immer wieder: Again what learned...:stupid:

p80286 20. Mär 2017 16:30

AW: ADO langsam :-(
 
Jo darauf muß man erst einmal kommen.

Denn in der D/ Hilfe steht:
Zitat:

Die Methode DisableControls deaktiviert die Aktualisierung der datensensitiven Steuerelemente, die mit der Datenmenge verbunden sind.

Delphi-Syntax:

procedure DisableControls;

C++ Syntax:

void __fastcall DisableControls(void);

Beschreibung

Rufen Sie DisableControls vor dem Verarbeiten einer großen Anzahl von Datensätzen auf, damit die datensensitiven Steuerelemente nicht bei jeder Änderung des aktiven Datensatzes aktualisiert werden. Auf diese Weise kann die ständige Bildschirmaktualisierung verhindert und die Verarbeitung beschleunigt werden, da die Daten nicht laufend auf dem Bildschirm ausgegeben werden müssen.

Wenn die Steuerelemente noch nicht deaktiviert sind, hält DisableControls den aktuellen Status der Datenmenge fest, benachrichtigt die verbundenen datensensitiven Steuerelemente und Detaildatenmengen von der Statusänderung und inkrementiert den Deaktivierungszähler der Datenmenge. Andernfalls wird lediglich der Deaktivierungszähler inkrementiert.

Der Deaktivierungszähler wird intern verwendet, um zu bestimmen, ob Daten in den datensensitiven Steuerelementen angezeigt werden sollen. Enthält die Zählervariable einen Wert größer Null, werden die Daten nicht aktualisiert.

Ist die Datenmenge die Hauptmenge einer Haupt/Detail-Beziehung, wird durch den Aufruf von DisableControls auch diese Beziehung deaktiviert. Wenn Sie BlockReadSize anstelle von DisableControls verwenden, wird die Detaildatenmenge beim Durchlaufen der Datenmenge aktualisiert, die datensensitiven Steuerelemente jedoch nicht.

Hinweis: Aufrufe von DisableControls können verschachtelt werden. Dabei muss jedoch für jeden Aufruf von DisableControls ein entsprechender Aufruf von EnableControls stattfinden, da sonst datensensitive Steuerelemente und Detaildatenmengen nicht aktualisiert werden.
Warum also sollte ich Disablecontrols verwenden, wenn ich mit Datensensitiven Komponenten nichts am Hut habe?
:wall:

Gruß
K-H

nahpets 20. Mär 2017 16:41

AW: ADO langsam :-(
 
Zitat:

Zitat von p80286 (Beitrag 1364854)
Warum also sollte ich Disablecontrols verwenden, wenn ich mit Datensensitiven Komponenten nichts am Hut habe?
:wall:

Gruß
K-H

Naja, ganz einfach:

Es wird permanent nachgeschaut, ob es eventuell was zu aktuallisieren gibt.

Mit DisableControls wird nicht mehr nachgeschaut.

DataSet weiß halt nicht, ob irgendwelche Komponenten dranhängen, deshalb muss das geprüft werden. Jedes Mal.

DisableControls sagt halt: Spar die die Prüfung (und natürlich dann auch alles das, was da noch dranhängt).

Schnellermachen geht auch noch anders:

Vor der Schleife das Programm minimieren, nachher wieder zurück auf vorherigen Zustand.
Minimiert muss nix Neumalen. Neumalen dauert.

haentschman 20. Mär 2017 16:55

AW: ADO langsam :-(
 
Zitat:

DisableControls sagt halt: Spar die die Prüfung (und natürlich dann auch alles das, was da noch dranhängt).
...wenn aber die DataSource = nil ist da würde ich erwarten das die Prüfung eingespart wird. :gruebel:

Alles andere müßten wir am Code der ADOQuery analysieren...wer hat Zeit. :stupid:

nahpets 20. Mär 2017 17:04

AW: ADO langsam :-(
 
Zitat:

Zitat von haentschman (Beitrag 1364860)
Alles andere müßten wir am Code der ADOQuery analysieren...wer hat Zeit. :stupid:

Nein, das Problem kenn' ich von allen Datenbankkomponenten, das ist nicht typisch ADOQuery.

Die ADO-Schnittstelle selbst ist wohl auch nicht die Schnellste. Da summieren sich dann unterschiedliche "Spaßbremsen".

p80286 20. Mär 2017 17:44

AW: ADO langsam :-(
 
[OT]
Da meine SQL-Oberfläche mit den erstgenannten Werten immer noch die Profi-Oberfläche der Datenbank schlägt, scheint in den verschiedenen Zugriffskomponenten (nicht nur Delphi) einiges an Optimierungspotential zu schlafen.
[/OT]

Gruß
K-H

nahpets 20. Mär 2017 18:18

AW: ADO langsam :-(
 
Ohja, das langsamste an den Datenbanken sind die Oberflächen.

Bei Mengenoperationen sollte man tunlichst auf deren Verwendung verzichten bzw. alles, was mit Optik zu tuen hat, auf ein Minimum reduzieren.

haentschman 21. Mär 2017 05:41

AW: ADO langsam :-(
 
Moin...:wink:
Zitat:

Da meine SQL-Oberfläche mit den erstgenannten Werten immer noch die Profi-Oberfläche der Datenbank schlägt
...wie muß man sich das, auch optisch, vorstellen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz