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
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#1

AW: Vergleich Firebird: C# vs. Delphi Win32

  Alt 22. Sep 2011, 16:31
im worst case noch mit attachtem debugger laufen lässt wird das dann *richtig* langsam.
...oder anders ausgedrückt Zeitmessung mit Strg-F5 (statt F5)

Morphies Beispiel-Code ist bei mir ohne Debugger ziemlich genau um den Faktor 8 schneller.

(ohne string + string + string und DoEvents bei jedem Durchlauf sollte es vergleichbar schnell wie mit Delphi sein)
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#2

AW: Vergleich Firebird: C# vs. Delphi Win32

  Alt 22. Sep 2011, 18:58
Morphies Beispiel-Code ist bei mir ohne Debugger ziemlich genau um den Faktor 8 schneller.

(ohne string + string + string und DoEvents bei jedem Durchlauf sollte es vergleichbar schnell wie mit Delphi sein)
Naja, das
Code:
label2.Text = i.ToString() + " / " + max.ToString();
ist eine einzige Konkatenation und erzeugt lediglich eine neue String-Variable. Das sollte verschmerzbar sein und nicht stören. Am besten packt er das ganze in einen Background-Thread (wurde schon angesprochen), die Label - Aktualisierung dann in eine jeweils neue anonyme Methode und schmeisst die dann zum Invoken auf den Mainthread. So hat die DB-Geschichte einen kompletten Kern für sich und das UI darf versuchen hinter den ganzen Aktualisierungen herzulaufen
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
 
#3

AW: Vergleich Firebird: C# vs. Delphi Win32

  Alt 22. Sep 2011, 19: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)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#4

AW: Vergleich Firebird: C# vs. Delphi Win32

  Alt 22. Sep 2011, 19: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
 
#5

AW: Vergleich Firebird: C# vs. Delphi Win32

  Alt 22. Sep 2011, 20: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)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#6

AW: Vergleich Firebird: C# vs. Delphi Win32

  Alt 23. Sep 2011, 06: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
 
#7

AW: Vergleich Firebird: C# vs. Delphi Win32

  Alt 23. Sep 2011, 07: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
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 02:46 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-2025 by Thomas Breitkreuz