Announcement

Collapse
No announcement yet.

Performance ADO vs BDE

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Performance ADO vs BDE

    Hallo zusammen,

    da ich mich von der BDE trennen möchte, habe ich erste Versuche mit ADO gemacht. Und feststellen müssen, daß ADO VIIIIIEEEEEL langsamer als die BDE ist.

    Umgebung: informix 7 Datenbank (über informix ODBC-Treiber), BCB 6 Enterprise, Windows XP Pro

    Ich habe einfach eine ADOConnection und ein ADODataset auf die Form gelegt (alle Einstellungen Standardwerte, hab' nur versucht das ADODataset auf clUseServer zu setzen, was aber eine Fehlermeldung gegeben hat).

    Zum Vergleich habe ich auch die BDE noch mal bemüht. Eine TDatabase und ein TQuery.

    Zum Testen habe ich dann einfach mal den Artikelstamm geöffnet und durch alle Artikel iteriert. Das Ergebnis ist entäuschend (alle Angaben in Millisekunden):<BR>
    BDE-Test<BR>
    Vorbereiten: 0<BR>
    Öffnen: 10<BR>
    Lauf: 3284<BR>
    Schließen: 361<BR>
    Anzahl: 28737<BR>

    ADO-Test<BR>
    Öffnen: 4206<BR>
    Lauf: 18416<BR>
    Schließen: 10<BR>
    Anzahl: 28737<BR>

    Die Testroutinen:
    <PRE>
    //ADO:
    adsartikel->Open();
    if (adsartikel->FindFirst())
    {
    do
    {
    count++;
    } while (adsartikel->FindNext());
    }
    adsartikel->Close();
    </PRE>
    <PRE>
    //BDE:
    qartikel->Prepare();
    qartikel->Open();
    if (qartikel->FindFirst())
    {
    do
    {
    count++;
    } while (qartikel->FindNext());
    }
    if (qartikel->Active)
    qartikel->Close();
    if (qartikel->Prepared)
    qartikel->UnPrepare();
    </PRE>
    Weitherhin hat die ADO-Routine am Ende eine Fehlermeldung ausgegeben: Entweder EOF oder BOF ist true (kann umgangen werden indem auf while (!adsartikel->Eof); geprüft wird).

    Die Verbindungen wurden vorher bereits 'geopened'.

    Mach' ich da irgendwas falsch, oder ist das einfach so? Gibt es Alternativen zu ADO?

    Grüße

    Jochen

  • #2
    Hallo Jochen,<p>
    schaue mal nach dem Fehler Eof/Bof. Der Bug war in Delphi 6 auch drin und ich dächte, dass Thema wurde hier schon mal behandelt. Bei Delphi 6 war's mit Update 2 OK.<p>
    Wegen der Geschwindigkeit solltest Du Deine Frage auf alle Fälle im Delphi-Abschnitt noch mal stellen. Was ich aber gesehen habe: FindFirst / FindNext... Probiere mal First und Next. clUseClient ist eigentlich OK, will heißen, die Daten werden beim Öffnen rüber geschaufelt. Da man ja bei einem Server nie große Datenmengen öffnet, ist das Verfahren eigentlich zu empfehlen, da der Server schnell wieder Ressourcen frei bekommtn.<p>
    Gibt es für Informix keine "direkten" Ado-Treiber? OBDC ist ja nur noch mal eine Zwischenschicht, schneller wirds dadurch sicher nicht.<p>
    Schöne Grüße, Mario Noack<p&gt
    Schöne Grüße, Mario

    Comment


    • #3
      Hallo Mario,

      danke für Deine Antworten. Das FindFirst() setze ich eigentlich nur ein, um festzustellen, ob eine Datenmenge leer ist, kann ich aber wohl auch über IsEmpty() machen.

      Eine Änderung von FindNext() auf Next() hat die Laufzeit tatsächlich um 1/3 reduziert (13000 statt 18000 ms).

      Was hab' ich mir denn unter einem 'direkten' ADO-Treiber vorzustellen (ADO ist absolutes Neuland für mich...)?

      Grüße

      Joche

      Comment


      • #4
        Hmm, ich weiß nicht, ob Treiber der richtige Begriff war. Aber wenn ich zum Beispiel auf Access zugreife, nutze ich den Jet-Provider:<p>
        Provider=Microsoft.Jet.OLEDB.4.0;<p>
        Der wird im Connection-String angegeben und wird von Ado für den Zugriff auf Access (aber zur Not auch auf BDE) verwendet. Der Jet-Provider ist bei Windows normalerweise dabei, es gibt den aber auch von MS zum Download. Vielleicht suchst Du im Web mal nach Povider, Ado und Informix. Ich könnte mir vorstellen, da wirst Du Informationen zu finden.<p>
        Schaue aber mal hier (Suche bei Entwickler, Delphi, Ado nach Informix):<br>
        http://www.entwickler-forum.de/webx?128@@.ee84e19<p>
        Vielleicht hilft Dir das weiter?<p>
        Schöne Grüße, Mario Noac
        Schöne Grüße, Mario

        Comment


        • #5
          Hallo Mario,

          den Jet-Provide (ist Teil der MDAC, wenn ich mich nicht irre) hab' ich natürlich. Werd' ich mir mal näher zu Gemüte führen, hab' ich bisher einen Bogen drum gemacht.

          Jetzt ist aber erst mal Ostern und die nächsten 4 Tage tut sich somit nix (voraussichtlich ).

          Allerdings muß ich auch zugeben, daß mir die meisten Eigenschaften von TADODataset noch nicht allzuviel sagen. Die Dokumentation im BCB dazu finde ich auch eher dürftig. Die Alternative zu mangelhafter Dokumentation wäre mangelnde Intelligenz meinerseits...

          Grüße und Frohe Ostern,

          Joche

          Comment


          • #6
            Hallo Jochen,

            probier mal die <a href="http://www.sql-direct.com">SQL-Direct</a>-Treiber aus. Sind mit sicherheit optimaler als Umwege über BDE oder ADO und ODBC zu gehen.

            Oder alternativ über dbExpress z.B. mit <a href="http://www.luxena.com/products.htm">dbExpress driver for Informix</a&gt

            Comment


            • #7
              Hallo Bernhard,

              die SQL-Direct-Treiber hab' ich mir gerade heruntergeladen. Der Preis bewegt sich ja auch noch im humanen Bereich, so das Ding meine Erwartungen erfüllt.

              Mit dbExpress hatte ich auch schon mal herumexperimentiert und da hat mich die Zwangs-Unidirektionalität doch sehr gestört. Wenn es die gleichen dbExpress-Treiber sind, die dem BCB beigelegen haben. Werd' ich noch prüfen.

              Danke schön,

              Joche

              Comment


              • #8
                Hallo Jochen,<p>
                bezüglich ADO kannst Du die Dokumentation von Borland gleich vergessen. Microsoft hat aber im SDK eigentlich sehr gute Dokumentation für den Zugriff per ADO. Da wird zwar der native Weg gegangen, ohne so komfortable Weg wie das AdoDataSet, aber im wesentlich dürften sich besonders die C++ Beispiele Dir ja schnell erschliessen.<p>
                http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/anch_dataaccess.asp<p>
                Schöne Grüße, Mario Noac
                Schöne Grüße, Mario

                Comment


                • #9
                  Hallo Mario,

                  danke für die Bestätigung bezüglich der schlechten Doku (da hab' ich wohl noch mal Glück gehabt ).

                  Die Doku von MS scheint tatsächlich eher was für mich zu sein. Muß ich mir aber noch näher zu Gemüte führen.

                  Danke Schön,

                  Joche

                  Comment


                  • #10
                    Hallo zusammen,

                    so als Nachtrag (ich trau mich fast gar nicht das zu posten, so simpel ist das):

                    Wenn im ADODataSet CursorLocation auf clUseServer gesetzt wird, ergeben sich nur noch marginale Performanceunterschiede.

                    Grüße Joche

                    Comment

                    Working...
                    X