Delphi-PRAXiS
Seite 1 von 5  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Performance: mein Programm trödelt! (https://www.delphipraxis.net/204596-performance-mein-programm-troedelt.html)

NicoleWagner 10. Jun 2020 08:52

Performance: mein Programm trödelt!
 
Hallo User,

ich habe Delphi XE 3, Professional.
Und damit ein kleines Programm geschrieben: ein Formular, ein paar Panels, ein paar schlanke Textdateien als Input. Einige arrays, die mir performant erzeugt und vernichtet erscheinen. Für dieses Programm sollte mein PC einen Wimpernschlag benötigen, es zu starten.
Es braucht jedoch 3-4 Sekunden, bis es sich zeigt.

Wie finde ich die angezogene Handbremse?
Es kann etwa sein, dass ich ein array in einer falschen Schleife zig mal erzeuge. Doch wenn ich es konkret wüsste, würde ich es ändern.
Als letzter Notanker würde ich Zeitmesser in meinen Code setzen. Doch das ist recht viel zu-Fuss-Arbeit.

Wie kann ich das herausfinden?
Gibt es da Tools oder Befehle, die schnell aufgerufen sind?

Danke für Tipps!

stahli 10. Jun 2020 09:06

AW: Performance: mein Programm trödelt!
 
3-4 Sekunden kann man vielleicht sogar mit F8 und F7 finden.

Wenn es weiter ins Detail gehen soll, kann ich AQTime empfehlen.
Ich bin aber nicht sicher, ob es da bei XE3 eine kostenfreie abgespeckte Version gab.

Wenn man solche Untersuchungen häufig braucht, lohnt sich auf jeden Fall die Prof-Version.

Ansonsten sind Zeitstempel loggen wohl die einfachste Variante.

Der schöne Günther 10. Jun 2020 09:10

AW: Performance: mein Programm trödelt!
 
Es gibt Tools, die nennen sich Profiler. Bis Delphi XE7 (meine ich) war eine Embarcadero-Edition von AQTime dabei, und das kann ich ebenfalls nur empfehlen. Ob das bei XE3 der Fall ist kann ich sagen. Ein bisschen Einarbeitungszeit wird man aufbringen müssen, aber damit kann man wirklich wahre Wunder vollbringen.

Ansonsten ist der Tipp mit dem Debugger und F7-F8 sicher hilfreicher als er sich anhört. Versuch es doch mal, damit findest du innerhalb weniger Sekunden doch schon einmal wo es wohl hängt - Beim Erzeugen der Formulare? Wenn ja, welches? Wenn es einen Verursacher gibt, wo genau?

WladiD 10. Jun 2020 09:45

AW: Performance: mein Programm trödelt!
 
Häufig ist ein Virenscanner "schuld".

Versuche dort für die Exe oder den beinhaltenden Ordner eine Ausnahme hinzuzufügen.

Lemmy 10. Jun 2020 10:04

AW: Performance: mein Programm trödelt!
 
"etwas" günstiger ist ProDelphi http://www.prodelphi.de/

Wichtig hier: für die Messung wird der entsprechende Code in deine Units aufgenommen - d.h. vorher einchecken - oder Sicherung erstellen!

Bernhard Geyer 10. Jun 2020 12:00

AW: Performance: mein Programm trödelt!
 
Zitat:

Zitat von NicoleWagner (Beitrag 1466908)
... Einige arrays, die mir performant erzeugt und vernichtet erscheinen...

Wirklich? Schon mal geschaut wie viel Speicher deine Anwendung beim Start benötigt.
Evtl. hast du ja hier eine "ungünstige" x-GB-Große Arrays die du anlegst und Zeit zum start benötigen.

DieDolly 10. Jun 2020 12:16

AW: Performance: mein Programm trödelt!
 
Zitat:

"etwas" günstiger ist ProDelphi http://www.prodelphi.de/
Noch günstiger, sogar kostenlos, geht es entweder wie stahli sagte mit F7 und F8.
Oder aber du setzt in der DPR und im OnCreate der Formulare die du erzeugst mal sporadisch showmessage(''); rein durchnummeriert von 1 bis 10 oder A bis ....
Es dauert nicht lange und du siehst sofort, was Sache ist.

NicoleWagner 10. Jun 2020 12:48

AW: Performance: mein Programm trödelt!
 
Danke für alle Antworten!
Ja, jetzt wo Ihr es sagt, AQTime war damals dabei, - doch ich kam damit nicht zurecht. Ich habe es aus meiner VM (die auch schlank sein soll) schon so lange entfernt, dass ich es schon wieder vergaß. Es kann sein, dass AQTime eher für höhere Versionen als die Pro geschrieben wurde und in der Pro zwar dabei war, doch nicht ordentlich läuft.

F7 und F8 geht bei mir eher nicht. Denn meine IDE hat Schluckauf schon seit ihrer Geburt. Delphi XE3 ist keine Glanzleistung von Embarcadero. Zuweilen müllt mir alleine die Programmierhilfe den Speicher so zu, dass ich Delphi mit dem Taskmanager abschießen muss. (Das hat jedoch wenig zu tun mit der schlechten Performance meines Programmes. Das ist fast sicher ein Programmierfehler.) Trotzdem ist F7 und F8 zu ungenau, denn das wäre dann möglicherweise der IDE-Schluckauf statt meines potentiellen Fehlers. Und F7 springt mir in den Maschinenquellcode, auch wenn ich es "einstelle", dass es das nicht tun soll ;-(
Ich arbeite in meiner Verzweiflung ersatzweise mit F4.

Ich werde zähneknirschend tun, was ich damals in Pascal tat: Eine paar globale Zeit-Variable erfinden. In der ersten wird "now" abgespeichert und danach immer wieder die Zeit (now) geholt und abgespeichert nach einem weiteren Programmschritt. "on destroy" werde ich dann subtrahieren und die Differenzen zwischen den Messungen ausgerechnet haben. Mit anderen Worten: ich speichere "now" in den globalen Vars zeit1, zeit2, zeit3,.... und sehe die jeweils vergangene Zeit.

Ein Graus in Zeiten von OOP...

DieDolly 10. Jun 2020 12:51

AW: Performance: mein Programm trödelt!
 
Das mit den Zeitvariablen kannst du einfacher mit showmessage's machen. Bei 3 bis 4 Sekunden sieht man auch so, wo es Probleme gibt.

Hobbycoder 10. Jun 2020 13:05

AW: Performance: mein Programm trödelt!
 
Wenn man Zeitspannen im Sekundenbereich erfassen möchte, können sich diese auch schnell aus Teilzeiten zusammenaddieren. Ob da ShowMessage wirklich immer geeignet ist, und nicht das Ergebnis zu stark verändert? Immerhin vergeht das schon die eine bis anderen 100ms bis man die weggeklickt hat.

Ich habe das dann immer so gemacht, dass ich mir als erstes eine StringList erzeugt habe, und dort mit mittels GetTickCount einen Zeitstempel und dahinter einen Text hineingeschrieben habe.
Z.B. so
Delphi-Quellcode:
sl.Add(inttostr(GetTickCount) + ': OnCreate - Enter');
am Ende der Procedure so
Delphi-Quellcode:
sl.Add(inttostr(GetTickCount) + ': OnCreate - Leave');
Am Ende das ganze einfach in ein temporär angelegtes TMemo oder als Datei wegschreiben.
Die eine Zeile ist schnell an die eine oder andere Stelle kopiert und angepasst und man kann sie innerhalb der Proceduren strategisch platzieren umd Rechenintensive Abläufe zu optimieren.
Hat mir immer gute Dienste geleistet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 Uhr.
Seite 1 von 5  1 23     Letzte »    

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