AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Performance Messung der Unit-Initialisierungsphase
Thema durchsuchen
Ansicht
Themen-Optionen

Performance Messung der Unit-Initialisierungsphase

Ein Thema von HeZa · begonnen am 22. Apr 2020 · letzter Beitrag vom 23. Apr 2020
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.332 Beiträge
 
Delphi 12 Athens
 
#1

AW: Performance Messung der Unit-Initialisierungsphase

  Alt 22. Apr 2020, 15:32
Nja, ob in der IDE oder nicht.
Das einzige Problem was wir hatten, war dass innerhalb der IDE öfters unerklärliche Exceptions auftraten, innerhalb der AQTime-BPLs/DLLs, selbst wenn man das Ding grad garnicht benutzte.

Auch daher ist es außerhalb der IDE wirklich um Längen angenehmer.


Im Programm selbst was machen zu wollen ist unschön.
Erstmal ist es nicht so einfach sich dort reinzuhängen (der Uwe sagte schon, wo man dazu was finden kann),
und dann muß an seinen Code auch sehr früh laden/ausführen, um sich reinzuhängen, bevor das Meiste schon durch ist. (und bei Verwendung der RTL/VCL-Packages ist das praktisch unmöglich)


Tipp: Falls du innerhalb des Programms wissen willst, dann deine EXE gestartet wurde, also zum Berechnen der Dauer, dann siehe Bei Google suchenGetProcessTimes.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#2

AW: Performance Messung der Unit-Initialisierungsphase

  Alt 23. Apr 2020, 07:37
Hallo,

Danke erstmal für die Antworten.

Eigene Units sind bestimmt gute Kandidaten und tatsächlich gibt es auch bereits Vermutungen, aber ich hätte gerne an unsere interne Diskussion etwas mehr Substanz gebracht in Form von Messungen. Ich hatte gehofft, dass es da einen einfachen Weg gibt. So sieht es aber erst mal nicht aus. Es sei denn, es kann jemand bestätigen, dass man AQTime die Laufzeit der Initialisierungsabschnitte von Delphi-Units messen kann?

Wie gesagt treten die Probleme unter Terminalserver auf. Einiges erklärt sich durch die aktuell höhere Last, aber eben nicht alles.

Ein Verdachtskandidat der an mich herangetragen wurde ist EurekaLog in der Version 7.4.0.0 und die neuere Version 7.6.6.43 soll Abhilfe schaffen.
Ein anderer Kandidat ist CrystalNet, dass wir für eine Kommunikation mit einer DotNet Komponente brauchen. Hier ist die Vermutung, dass CrystalNet in der Startphase die ganze DotNet Umgebung Initialisiert.

Ich nehme erstmal den Tipp von Himitsu mit, die Zeit bis zum ersten Dialog via GetProcessTimes zu dokumentieren.

Ciao HeZa
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.390 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Performance Messung der Unit-Initialisierungsphase

  Alt 23. Apr 2020, 09:55
Performanceprobleme mit Vermutungen zu lösen ist meist eine schlechte Idee.

Ein erster Weg kann wirklich sein, mit GetTickCount und CO Zeiten zu messen.

Ein Problem bleibt: auch wenn eine Funktion nur 3-4 ms für einen Lauf braucht, kann die am Ende für eine extrem lange wartezeit verantwortlich sein, wenn die entsprechend oft aufgerufen wird.

Ich verwende bei solch nicht trivialen Dingen sehr gerne http://www.prodelphi.de/
Auch, wenn das den Sourcecode verändert - aber das ist in Zeiten SVN, git und co meiner Meinung keine Ausrede mehr. Vor allem ist ProDel mit 60-70€ echt ein Schnäppchen...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.620 Beiträge
 
Delphi 12 Athens
 
#4

AW: Performance Messung der Unit-Initialisierungsphase

  Alt 23. Apr 2020, 10:43
Ein Problem bleibt: auch wenn eine Funktion nur 3-4 ms für einen Lauf braucht, kann die am Ende für eine extrem lange wartezeit verantwortlich sein, wenn die entsprechend oft aufgerufen wird.
Für den Unit-Initialization Code sollte das egal sein. Der wird immer nur einmal aufgerufen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.034 Beiträge
 
Delphi 12 Athens
 
#5

AW: Performance Messung der Unit-Initialisierungsphase

  Alt 23. Apr 2020, 13:34
Ein Problem bleibt: auch wenn eine Funktion nur 3-4 ms für einen Lauf braucht, kann die am Ende für eine extrem lange wartezeit verantwortlich sein, wenn die entsprechend oft aufgerufen wird.
Für den Unit-Initialization Code sollte das egal sein. Der wird immer nur einmal aufgerufen.
Jein: wenn du da eine Schleife reinbaust die 1000x etwas aufruft was jeweils 3-4ms benötigt, dann geht da auch die Zeit für flöten...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.332 Beiträge
 
Delphi 12 Athens
 
#6

AW: Performance Messung der Unit-Initialisierungsphase

  Alt 23. Apr 2020, 11:09
Ach ja, bei uns haben wir inzwischen nahezu alles "Schlimme" aus den unseren Initialization'en rausgenommen.
Stattdessen gibt es überall Class-Function ModulInitialize (in der Hauptklasse dieser Unit, bzw. des Package), die wir dann in einer zentralen Stelle der EXE aufrufen.

Erstmal hatten wir das Problem, dass wir hier massig BPLs haben und wenn es dann irgendwo hing, war es schwer zu finden.
So haben wir eine Funktion, die man "gemütlich" debuggen kann und wo sich "einfacher" eine gemeinsame Fehlerbehandlug einbauen ließ.
Unter anderem eine Fortschrittsvariable, die für die großen Zwischenschritte mit einem Namen gefüllt wird.
Einmal für die Fortschrittsanzeige beim Start und auch für den Fehlertext im großen Try-Except um alles drumrum.

Für die großen bekannten Fehlerstellen kann uns ein "Benutzer" diesen Namen am Telefon einfach nennen, ohne Eurekalog vorlesen zu müssen/können.
z.B. Acrobat zickt mal wieder rum oder das Font-Registrieren hängt mal wieder, weil MS-Office sich dämlich überall reinhängt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (23. Apr 2020 um 11:13 Uhr)
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.164 Beiträge
 
Delphi 12 Athens
 
#7

AW: Performance Messung der Unit-Initialisierungsphase

  Alt 23. Apr 2020, 11:22
Die class constructoren sind ja im Prinzip auch initialization Bereiche in einer Unit.
Wann genau werden die eigentlich aufgerufen, ich vermute mal NACH dem initialization Teil.

Geändert von Rollo62 (23. Apr 2020 um 11:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.332 Beiträge
 
Delphi 12 Athens
 
#8

AW: Performance Messung der Unit-Initialisierungsphase

  Alt 23. Apr 2020, 11:43
Class Conscrutctor direkt vor dem Initialization seiner Unit, in der Reihenfolge der Deklaration der Klassen.

Hab nicht nachgesehn, ob die das über die RTTI suchen, oder ob der Compiler den Aufruf implizit in das Initialization reinschreibt.
Beim Class Desctructor genau andersrum, also am Ende des Finalization.

Aber schön am Class Constructor ist, dass es nur gemacht wird, wenn die Klasse irgendwo verwendet wurde.
Und nicht wie beim Initialization, wo der manuelle Aufruf die Klasse immer mit reinzieht, egal ob sie verwendet wird.
Deswegen, und weil Ressourcen nicht benutzungsabhängig eingebunden werden können, ist die EXE mit der VCL so rießig.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (23. Apr 2020 um 13:09 Uhr)
  Mit Zitat antworten Zitat
HeZa

Registriert seit: 4. Nov 2004
Ort: Dortmund
182 Beiträge
 
Delphi 10 Seattle Professional
 
#9

AW: Performance Messung der Unit-Initialisierungsphase

  Alt 23. Apr 2020, 12:57
Hallo,

Aber schön am Class Constructor ist, dass es nur gemacht wird, wenn die Klasse irgendwo verwendet wurde.
Und nicht wie beim Initialization, wo der manuelle Aufruf die Klasse immer mit reinzieht, egal ob sie verwendet wird.
das klingt nach einem sehr interessanten Vorteil.

Ciao HeZa
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.671 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

AW: Performance Messung der Unit-Initialisierungsphase

  Alt 23. Apr 2020, 13:48
Beim Class Desctructor genau andersrum, also am Ende des Finalization.
Ist das nicht vor dem Aufruf der finalization?
Thomas Mueller
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:43 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 by Thomas Breitkreuz