AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Vergleich Firebird: C# vs. Delphi Win32
Thema durchsuchen
Ansicht
Themen-Optionen

Vergleich Firebird: C# vs. Delphi Win32

Ein Thema von Morphie · begonnen am 22. Sep 2011 · letzter Beitrag vom 23. Sep 2011
Antwort Antwort
Seite 2 von 2     12   
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#11

AW: Vergleich Firebird: C# vs. Delphi Win32

  Alt 22. Sep 2011, 20:07
wie gesagt, das war nur eine Testanwendung Die eigentliche Anwendung ist natürlich sauberer...
Zu euren Vorschlägen:
Mit Strg + F5 läuft das ganze schon wesentlich schneller! Das war anscheinend das Kernproblem...

Jetzt bin ich mit 10000 Datensätze bei ziemlich genau 4 Sekunden. Ich denke das reicht soweit.
Delphi braucht bei entsprechendem Code nun ca. 2,2 Sekunden.

Vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)
Online

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#12

AW: Vergleich Firebird: C# vs. Delphi Win32

  Alt 22. Sep 2011, 20:12
Zu euren Vorschlägen:
Mit Strg + F5 läuft das ganze schon wesentlich schneller! Das war anscheinend das Kernproblem...
Ja, der Debugger analysiert ne Menge mit im Hintergrund. Performancetests daher immer ohne Debugger machen. Und die 2 Sekunden Differenz bekommst Du auch noch raus
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#13

AW: Vergleich Firebird: C# vs. Delphi Win32

  Alt 22. Sep 2011, 21:26
Hast du da zufällig einen Tipp wie ich das machen könnte?
Klar, irgendwann wird das in einen Thread ausgelagert, aber von der Ausführungszeit sollte das doch noch keinen Unterschied machen...

Die Schleife sieht nun so aus:
Code:
const int max = 10000; // < Anzahl
for (int i = 0; i < max; i++)
{
    // Werte den Parametern zuweisen
    Cmd.Parameters["Par1"].Value = i;
    Cmd.Parameters["Par2"].Value = i;
    Cmd.Parameters["Par3"].Value = "Test";
    Cmd.Parameters["Par4"].Value = DateTime.Now;

    // Command durchführen
    Cmd.ExecuteNonQuery();

    // Nach jeweils 3000 Datensätz die Transaktion "committen"
    if ((i % 3000) == 0) Trans.CommitRetaining();
}
wüsste nicht, was ich da noch optimieren könnte...
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)
Online

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#14

AW: Vergleich Firebird: C# vs. Delphi Win32

  Alt 23. Sep 2011, 07:32
wüsste nicht, was ich da noch optimieren könnte...
Ich schon
Der Indexer-Zugriff auf den Parameter muss nicht innerhalb der Schleife passieren, weil das jedesmal ein Loopup ist. Das reicht wenn man den ein einziges mal macht, und nicht 40.000 mal

Code:
var param1 = Cmd.Parameters["Par1"];
var param2 = Cmd.Parameters["Par2"];
var param3 = Cmd.Parameters["Par3"];
var param4 = Cmd.Parameters["Par4"];

const int max = 10000; // < Anzahl
for (int i = 0; i < max; i++)
{
    // Werte den Parametern zuweisen
    param1.Value = i;
    param2.Value = i;
    param3.Value = "Test";
    param4.Value = DateTime.Now;

    // Command durchführen
    Cmd.ExecuteNonQuery();

    // Nach jeweils 3000 Datensätz die Transaktion "committen"
    if ((i % 3000) == 0) Trans.CommitRetaining();
}
Alternativ kannst Du Dir die Referenzen auf die Parameter auch gleich beim Erzeugen der Parameter merken, dann sparst Du Dir die 4 Lookups zu Beginn auch nochmal, da wär allerdings wirklich mikrooptimierung.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#15

AW: Vergleich Firebird: C# vs. Delphi Win32

  Alt 23. Sep 2011, 08:02
@Morphie: Wird nicht mehr so viel bringen, aber anstatt CommitRetaining ein normales Commit machen. Somit ist es aus Sicht von Firebird keine langlaufende Transaktion und die OIT/OAT kann nachziehen.
  Mit Zitat antworten Zitat
Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#16

AW: Vergleich Firebird: C# vs. Delphi Win32

  Alt 23. Sep 2011, 08:29
Danke =)
Beide Tipps zusammen bringen ca. 100ms bei 10.000 DS.

So lasse ich es nun erstmal denke ich...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 14:47 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