AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Performance TpFIBDataset
Thema durchsuchen
Ansicht
Themen-Optionen

Performance TpFIBDataset

Ein Thema von nachti1505 · begonnen am 23. Okt 2008 · letzter Beitrag vom 29. Okt 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Performance TpFIBDataset

  Alt 23. Okt 2008, 13:42
Dann muss ich mich leider ausklinken. Hansa, übernehmen Sie
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Performance TpFIBDataset

  Alt 23. Okt 2008, 13:44
@ DeddyH
Schade, trotzdem DANKE
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
480 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: Performance TpFIBDataset

  Alt 23. Okt 2008, 14:23
Hallo,
ich verwende nie FieldByNumber sondern
Dataset.Fields[index].As...

Warum verwendest du nicht die fibquery, wenn diese so schnell ist???
Das FibDataset nimmt man doch nur, wenn die Datensätze gepuffert werden müssen, um zurück kommen zu können.

Gruß Bernd
Bernd
  Mit Zitat antworten Zitat
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#14

Re: Performance TpFIBDataset

  Alt 24. Okt 2008, 08:54
So, nochmal eine Zusammenfassung:
Delphi-Quellcode:
var
  Dataset: TpFIBDataset;

begin
  Dataset.First;
  while NOT Dataset.Eof do begin
    for i := 0 to 9 do begin
      Dataset.Fields[i].AsString;
    end;
    Dataset.Next;
  end;
end;
Das ganze ist einfach nur eine Routine, um die Geschwindigkeit des Auslesens von 10 Feldern zu testen, weswegen der resultierende String auch zu nichts zugewiesen wird. Am Dataset hängen keine Sources, Komponenten etc.!

Der Query fragt aus der Datenbank (Adressen) alle Felder der Tabelle ab. In der Tabelle befinden sich ca. 3500 Einträge.

Performance
TpFIBDataset: ~35000 ms
TpFIBQuery: 4600 ms
JvUIBQuery: 600 ms

Also signifikante Unterschiede.

Auf die JvUIB hab ich zum Laden verzichtet, da sich die JvUIBTransaction imho nicht mit der TpFIBTransaction synchronieren lässt.

Workaround für mich um passable Geschwindigkeiten zu erreichen:

1) Begrenzen der Abfrage auf 500 Datensätze
2) Nutzen des pFIBQuery aus dem pFibDataset
Dataset.QSelect.Fields[i].AsString Vielen Dank an alle Mitdiskutierenden.

BTW: Erstaunlich, dass eine OS-Komponente (JvUIB) schneller ist, als eine kommerzielle (FIBPlus). Trotzdem sind mir die FIBs bequemer
  Mit Zitat antworten Zitat
exilant

Registriert seit: 28. Jul 2006
134 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: Performance TpFIBDataset

  Alt 24. Okt 2008, 09:24
Zitat von nachti1505:
So, nochmal eine Zusammenfassung:
Performance
TpFIBDataset: ~35000 ms
TpFIBQuery: 4600 ms
JvUIBQuery: 600 ms
Verstehen tue ich das nicht. Ich fülle hier eine doppelt verkettetet Liste mit > 4.000 Einträgen aus einem tpFibdataset (23 Columns) dem ein Query mit ziemlich heftigen Joins zugrunde liegt.
Die verwendeten Tabellen haben zwischen 12.000 und 15 Mio. rows.
Ausführungszeit des Querys (tpfibdatsat.active := true) mit anschliessendem iterieren durch das Ergebnis incl. Aufbau der Datenstruktur dauert < 1,5 Sec.

Firebird 2.0.1 SuperServer/Linux
Delphi 2007 bzw. Delphi 5 (gleich schnell)


Deine Angabe mit den 35.000ms macht mir daher zu schaffen. 35.000 ms bei 3.500 Datensätzen ergibt lächerliche 10 Records/sec. Da muss was faul sein.
Anything, carried to the extreme, becomes insanity. (Exilant)
  Mit Zitat antworten Zitat
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: Performance TpFIBDataset

  Alt 24. Okt 2008, 09:28
Gib mir doch mal bitte ein Codeschnipsel, wie du durch das Dataset iterierst. Hast du evt. irgendwelche speziellen Optionen im Dataset angeschalten oder abgeschalten? Spielt vielleicht die Transaktion auch noch eine Rolle?

BTW: Was mir aufgefallen ist, wenn die pFIBDatabase lokal läuft (Programm läuft auf dem Server) gibt es einen unheimlichen Geschwindigkeitszuwach gegenüber einer Remotevariante (127.0.0.1:C:\Programme\Firebird_2_1\Datenbank.fdb )...
  Mit Zitat antworten Zitat
exilant

Registriert seit: 28. Jul 2006
134 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Performance TpFIBDataset

  Alt 24. Okt 2008, 10:05
Zitat von nachti1505:
Gib mir doch mal bitte ein Codeschnipsel, wie du durch das Dataset iterierst. Hast du evt. irgendwelche speziellen Optionen im Dataset angeschalten oder abgeschalten? Spielt vielleicht die Transaktion auch noch eine Rolle?
Delphi-Quellcode:

// dsActiveOrders ist ein tpFibdataset (ein tpFibquery würde es genauso tun,
// hat historische Gründe)

dsActiveOrders.active := true;

while not dsActiveorders.eof do begin
  currentEntry := mylist.addentry;
  currententry.id := dsActiveOrders.fieldbyname('id').asinteger;
  currententry.StackId := dsActiveOrders.fieldbyname('stackid').asinteger;
  currententry.StockId := dsActiveOrders.fieldbyname('stockid').asinteger;
  currententry.Status := dsActiveOrders.fieldbyname('status').asinteger;
  currententry.Partitial := dsActiveOrders.fieldbyname('partitial').asstring;
  currententry.Orderdate := dsActiveOrders.fieldbyname('orderdate').asdatetime;
  ...
  ...
  dsActiveOrders.next;
end;
currententry.next := NIL;
dsActiveorders.active := false;
Das war's schon. Nichts besonderes. Das Dataset hat eine eigene Transaktion (autostart).

Zitat von nachti1505:
BTW: Was mir aufgefallen ist, wenn die pFIBDatabase lokal läuft (Programm läuft auf dem Server) gibt es einen unheimlichen Geschwindigkeitszuwach gegenüber einer Remotevariante (127.0.0.1:C:\Programme\Firebird_2_1\Datenbank.fdb )...
Dazu kann ich nichts sagen. Ich habe hier nur mit entfernten Datenbanken auf Linux Servern zu tun.
Anything, carried to the extreme, becomes insanity. (Exilant)
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#18

Re: Performance TpFIBDataset

  Alt 24. Okt 2008, 23:57
Du hast das Stringgrid als Fehlerursache ausgeschlossen. Ich nicht und Test gemacht : Ergebnis : Anhang.
Angehängte Dateien
Dateityp: doc source_160.doc (25,5 KB, 15x aufgerufen)
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Performance TpFIBDataset

  Alt 25. Okt 2008, 17:01
Mhhh, was dein Test und vorallem das Sleep(3000) nun mit einem StringGrid zu tun hat, erschließt sich mir nicht wirklich.

In meinem letzten PerformanceTest habe ich ja nicht mal mehr ein StringGrid benutzt, sondern einfach nur beliebige 10 Dataset.Fields[i].AsString aufgerufen.

Mein letzter Verdacht bezieht sich nun auf meine FIB-Version. Bin immer noch TRIAL-User. Ist es vllt.möglich, dass Devrace die TRIAL von der Performance her beschränkt hat???
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#20

Re: Performance TpFIBDataset

  Alt 25. Okt 2008, 17:28
Zitat von nachti1505:
...das Sleep(3000) nun mit einem StringGrid zu tun hat, erschließt sich mir nicht wirklich.
Schwierig, was ? Das Stringgrid ist völlig aussen vor. Nicht das das bei dir doch noch irgendwo rumschwirrt. Das sleep (3000) zeigt lediglich, wer oder was für die Dauer von 3 Sek. verantwortlich ist. Nämlich nicht etwa über 20000 Datensätze, sondern nur das sleep !!

Zitat von nachti1505:
Mein letzter Verdacht bezieht sich nun auf meine FIB-Version. Bin immer noch TRIAL-User. Ist es vllt.möglich, dass Devrace die TRIAL von der Performance her beschränkt hat???
So blöd sind sie nun wirklich nicht. Es ist schon schlimm genug, wie manche Leute die Performance trotz aller Vorsichtsmaßnahmen irgendwie doch so gebremst kriegen, dass sie sogar denken, die Komponenten wären das schuld. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 17:27 Uhr.
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