Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Programmstart langsam (https://www.delphipraxis.net/200699-programmstart-langsam.html)

freimatz 16. Mai 2019 21:32

Programmstart langsam
 
Hallo,
ein Anwender stört sich daran, dass mein Programm langsam startet. Mich hat es auch schon gestört. Es gibt viele kleinere Aktionen und einen größeren Block mit 30 Sekunden. Mein Programm ist eine Windows-Anwendung, XE-2, MDI und Expressbars von DevExpress.
Durch debuggen stellte ich fest, dass die Zeit in der unit System.Classes hier gebraucht wird:
Delphi-Quellcode:
procedure NotifyGlobalLoading;
var
  I: Integer;
  G: TList;
begin
  G := GlobalLoaded; // performance: eliminate repeated trips through TLS lookup
  for I := 0 to G.Count - 1 do
    TComponent(G[I]).Loaded;
end;
G.Count ist 726. Das erscheint recht viel, dürfte aber der Anzahl der Komponenten in meinem Programm entsprechen. Ich sehe derzeit auch keine Möglichkeit einen Teil auszulagern, weil DevExpress das Menüband u.a. beim Start ja auch lädt.
Einige Fälle hab eich durchgesteppt. Irgendwann kommt man in procedure TComponent.Loaded; an wo dann Exclude(FComponentState, csLoading); gemacht wird.

Ist jemand ein Problem bekannt und/oder eine Idee wie man das verbessern kann?

Hier ist das auch schon behandelt, ist aber wohl ein anderes Problem.

TiGü 17. Mai 2019 08:15

AW: Programmstart langsam
 
Ich nehme an, das Menüband zeigt Icons/Bilder?
Wie ist die Startzeit, wenn du die Verbindung zwischen ImageList (oder woher die Icons auch kommen mögen) und Menüband trennst, so dass keine Icons angezeigt werden?

peterbelow 17. Mai 2019 13:46

AW: Programmstart langsam
 
Zitat:

Zitat von freimatz (Beitrag 1432370)
Hallo,
ein Anwender stört sich daran, dass mein Programm langsam startet. Mich hat es auch schon gestört. Es gibt viele kleinere Aktionen und einen größeren Block mit 30 Sekunden. Mein Programm ist eine Windows-Anwendung, XE-2, MDI und Expressbars von DevExpress.
Durch debuggen stellte ich fest, dass die Zeit in der unit System.Classes hier gebraucht wird:
Delphi-Quellcode:
procedure NotifyGlobalLoading;
var
  I: Integer;
  G: TList;
begin
  G := GlobalLoaded; // performance: eliminate repeated trips through TLS lookup
  for I := 0 to G.Count - 1 do
    TComponent(G[I]).Loaded;
end;
G.Count ist 726. Das erscheint recht viel, dürfte aber der Anzahl der Komponenten in meinem Programm entsprechen. Ich sehe derzeit auch keine Möglichkeit einen Teil auszulagern, weil DevExpress das Menüband u.a. beim Start ja auch lädt.
Einige Fälle hab eich durchgesteppt. Irgendwann kommt man in procedure TComponent.Loaded; an wo dann Exclude(FComponentState, csLoading); gemacht wird.

Ist jemand ein Problem bekannt und/oder eine Idee wie man das verbessern kann?

Naja, Loaded wird von vielen Komponenten überschrieben um Initialisierungsaufgaben zu erledigen, z. B. bei einer aktiven database connection-Komponente die Verbindung zur Datenbank herzustellen, oder Daten aus einer Datei oder Resource zu laden, etc. Das kann dann dauern, besonders wenn die Aktion erst nach einem Timeout fehlschlägt...
726 Komponenten auf einem Form sind allerdings auch reichlich viel, da solltest Du mal über eine bessere Aufteilung nachdenken und, wenn möglich, Teile des UI erst erzeugen wenn sie auch wirklich gebraucht werden. Stichwort Frames...

dummzeuch 17. Mai 2019 13:47

AW: Programmstart langsam
 
Lässt Du evtl. alle Formulare Deines Programms automatisch beim Programmstart erzeugen? Wenn ja, schalte das mal für alle außer dem Hauptformular aus und prüfe, wie sich die Startzeit ändert.

Wenn das genug bringt, musst Du halt die anderen Formulare erzeugen (und ggf. freigeben), wenn sie gebraucht werden.

freimatz 17. Mai 2019 21:32

AW: Programmstart langsam
 
Hallo,
Danke für all Eure Anworten und Anregungen.

@TiGü: ich habe die Imagelisten alle mal gecleart. Es ist leider immer noch langsam.

@peterbelow: Datenbankverbindungen habe ich keine. Klar sind 726 Komponenten viel. Allerdings brauche ich die auch beim Starten schon. Der Anwender kann sich das Menüband und Symbolleisten alle selber konfigurieren. Beim Start wird das geladen und daher müssen die Controls auch alle da sein.

@dummzeuch: Neben dem Hauptformular lasse ich beim Start nur Datenmodule erzeugen. Dazu kommt noch ein Splashscreen. Dann kommen noch zwei weitere Formulare, die sehr schnell gehen.

Kann ich irgendwie feststellen ob und welche controls lange brauchen? Ich kann ja nicht in System.Classes eine Zeitmessung einbauen.

hoika 17. Mai 2019 22:55

AW: Programmstart langsam
 
Hallo,
Du könntest mit einer Logdatei prüfen, was konkret so lange dauert.
30 Sek. sind wirklich lang.

Luckie 18. Mai 2019 08:30

AW: Programmstart langsam
 
Hast du schon mal mit einem Profiler geguckt, wo genau der Flaschenhals ist?

Bernhard Geyer 18. Mai 2019 11:32

AW: Programmstart langsam
 
Ist nicht noch eine Abgespecktes AQTime in Delphi dabei?

Ansonsten: https://smartbear.com/product/aqtime-pro/tool-for-more/
ist eigentlich ein muss für Professionelle SW-Entwicklung wenn man hin und wieder mal Performance-Bottlenecks in der Anwendung hat.

hoika 19. Mai 2019 11:37

AW: Programmstart langsam
 
Hallo,
Zitat:

Neben dem Hauptformular lasse ich beim Start nur Datenmodule erzeugen
Und was steht in den Datenmodulen, DB-Zugriffe?

#Update#:
Nein, keine DB-Zugriffe, wie er es ja bereits gesagt hatte ...

Ich bleibe bei meinem Tipp, eine Log-Datei zu benutzen,
falls AQTime oder ähnliches nicht zur Verfügung steht.

TiGü 20. Mai 2019 09:39

AW: Programmstart langsam
 
Neben AQTime möchte ich noch die Nexus Quality Suite in den Raum werfen.
Die gibt es auch in einer brauchbaren Trial-Variante.

https://www.youtube.com/watch?v=oQyqilsYrFk


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:46 Uhr.
Seite 1 von 2  1 2   

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